Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
288 commits
Select commit Hold shift + click to select a range
8a9ef2a
feat(discord): classicBot guild whitelist (allowed_guilds)
changhansung Apr 23, 2026
a1d682d
feat(discord): add classicBot.yaml setup to quickstart Discord flow
changhansung Apr 23, 2026
06d5fe6
Merge branch 'fix/discord-guildid-classic-bot' into discord-ux
changhansung Apr 23, 2026
d2a7ddc
Merge branch 'fix/discord-ux-dev1' into discord-ux
changhansung Apr 23, 2026
488f425
chore: remove dev2 workspace files from merge
changhansung Apr 23, 2026
07f981e
feat(quickstart): add 'patch config' mode for existing fleet.yaml
changhansung Apr 23, 2026
15ae523
fix(discord): allow slash commands from non-primary guilds through ad…
changhansung Apr 23, 2026
8b0b39f
docs: add Discord ClassicBot section to README
changhansung Apr 23, 2026
542c944
fix(agent): require per-instance token on /agent endpoint (P1.1)
suzuke Apr 18, 2026
7b477cf
fix(web): strict zod validation for all /ui/* mutation endpoints (P1.3)
suzuke Apr 18, 2026
0ef2c5b
fix(import): validate tar entries before extraction (P1.4)
suzuke Apr 18, 2026
1288e36
fix(service): validate template vars to prevent directive injection (…
suzuke Apr 18, 2026
b33c102
fix(security): resolve symlinks when enforcing project_roots (P1.6)
suzuke Apr 18, 2026
4209bf8
fix(access): forward callerUserId from confirmPairing for rate-limit …
suzuke Apr 18, 2026
e306f2c
fix(cmd): harden branch and logPath against argument injection (P1.8)
suzuke Apr 18, 2026
a8aefa0
fix(access-path): reject path-traversal in instance name (P4.3)
suzuke Apr 20, 2026
5df1abb
fix(telegram): allowlist apiRoot hosts to prevent token exfil (P3.3)
suzuke Apr 20, 2026
c654cb4
fix(telegram): cap 409 polling retries to prevent infinite loop (P3.2)
suzuke Apr 20, 2026
1fac726
fix(ipc): tighten single-line buffer cap from 10 MB to 1 MB (P3.7)
suzuke Apr 20, 2026
9903c16
fix(channel): reset MessageQueue backoff after flood-control drop (P3.8)
suzuke Apr 20, 2026
dfefff7
fix(tmux): clear stale pane cache on control-mode reconnect (P2.1)
suzuke Apr 20, 2026
17d234b
fix(transcript): add reentry guard to pollIncrement (P2.4)
suzuke Apr 20, 2026
f432f7c
fix(scheduler): catch up missed runs within 24h on init (P2.3)
suzuke Apr 20, 2026
15be068
fix(cost-guard): reset emitted flags on session rotation (P2.2)
suzuke Apr 20, 2026
d8c2a11
fix(cost-guard): handle DST transitions in msUntilMidnight (P2.8)
suzuke Apr 20, 2026
6bf281c
fix(archiver): persist archived topic state across restarts (P2.6)
suzuke Apr 20, 2026
3a336c7
fix(paths): use sha256 for tmux session/socket suffix (P4.5)
suzuke Apr 20, 2026
2d87b76
fix(config): unify validateTimezone + restrict .env to 0o600 (P4.4)
suzuke Apr 20, 2026
0fb8c7b
fix(daemon): stop health check when instance directory is removed ext…
suzuke Apr 20, 2026
d772c0f
fix(web): set web.token file permission to 0o600 (P1.2)
suzuke Apr 18, 2026
26736f6
fix(startup): drop redundant sleep+reconnect after instance start (P2.7)
suzuke Apr 20, 2026
9529035
fix(sse): evict dead clients + listen for socket errors (P2.5)
suzuke Apr 20, 2026
dd8f4db
feat(quickstart): list Discord servers when adding classicBot guilds
changhansung Apr 23, 2026
3cbba89
fix(quickstart): read bot token from fleet.yaml bot_token_env for gui…
changhansung Apr 23, 2026
d40b95e
feat(mcp): include classic bot instances in list_instances
changhansung Apr 23, 2026
d2e523c
fix(discord): prevent duplicate category creation with promise-based …
Apr 26, 2026
c731a47
fix: auto-download document attachments to inbox
Apr 26, 2026
6fa98a7
fix: classicBot saveClassicAttachment supports document attachments
Apr 26, 2026
d40a4ef
feat(quickstart): add admin_users to classicBot.yaml setup
changhansung Apr 29, 2026
b1ac0d4
feat: classicBot admin commands (/compact, /save, /load) + topic mode…
changhansung Apr 29, 2026
e58f809
Merge branch 'fix/discord-ux-dev1' into discord-ux
changhansung Apr 29, 2026
2c54735
chore: remove dev2 steering file from merge
changhansung Apr 29, 2026
7ed8329
fix(security): block /raw bypass in classic channels + serialize raw_…
changhansung Apr 29, 2026
6014612
fix(security): 3 critical issues from full review
changhansung Apr 29, 2026
ef0ab38
feat(discord): message queue status reactions (👀 → ⏳ → ✅)
changhansung Apr 30, 2026
4e4a6e5
Merge branch 'fix/discord-guildid-classic-bot' into discord-ux
changhansung Apr 30, 2026
03102aa
fix(discord): message status react for classic bot slash commands
changhansung Apr 30, 2026
1117507
fix(tmux): retry Enter after paste to handle swallowed keypress in bu…
changhansung Apr 30, 2026
6f9509d
fix(daemon): increase waitForIdle timeout to 120s to prevent Enter sw…
changhansung Apr 30, 2026
d9e6f5d
feat: restart_instance MCP tool + fix lightweight waitForIdle
changhansung May 1, 2026
34cea07
fix(classic): call reregisterClassicChannels after /start
changhansung May 3, 2026
3e854f6
fix(classic): sync openChannels on /stop + clear stale entries
changhansung May 3, 2026
2c320b7
feat(discord): /ctx slash command to show agent context usage
changhansung May 3, 2026
2795084
feat(discord): /ctx supports both classic and topic mode channels
changhansung May 3, 2026
1dcd5ef
feat(opencode): auto-dismiss Permission required + confirm dialogs
changhansung May 5, 2026
797e272
perf: reduce error/dialog monitor interval from 30s to 5s
changhansung May 5, 2026
7989521
fix(opencode): Permission required → Allow always (Right+Enter)
changhansung May 5, 2026
13bad41
fix(kiro): remove error patterns (false positives from web search res…
changhansung May 5, 2026
de8b16e
fix(scheduler): allow classic bot instances as valid schedule targets
changhansung May 8, 2026
644836a
feat(kiro): use --classic mode to reduce memory usage
changhansung May 10, 2026
5744f9d
fix(kiro): use --legacy-ui instead of --classic
changhansung May 11, 2026
bda4c84
feat(discord): multi-bot collaboration mode (/collab)
changhansung May 11, 2026
aeb96e0
chore: remove dev2 steering file
changhansung May 11, 2026
4e126ab
feat: pre_task_command + General steering tips
changhansung May 11, 2026
5f5c301
fix(ctx): support kiro-cli prompt with lambda symbol (X% λ !>)
changhansung May 12, 2026
744a967
fix(ctx): remove $ anchor — kiro prompt has hint text after !>
changhansung May 12, 2026
2b5203f
feat: bundle general-knowledge/ for auto-sync to General steering
changhansung May 13, 2026
73c860e
fix(knowledge): fork instance use tmux send-keys instead of /raw
changhansung May 13, 2026
6226af2
docs(knowledge): note skills are kiro-cli backend only
changhansung May 13, 2026
9297c93
fix(knowledge): fork uses tmux for both save+load, wait for idle
changhansung May 13, 2026
c5005a2
fix(resume): don't skip resume on instructions change — notify instead
changhansung May 14, 2026
e534526
feat(telegram): add ClassicBot mode for private chats and groups
changhansung May 14, 2026
36ba6ff
fix(telegram): bypass fleet ACL for classic mode candidates
changhansung May 14, 2026
5fbb092
feat: multi-adapter support — fleet.yaml channels array
changhansung May 14, 2026
20867ad
fix: multi-adapter review issues — general binding, double-stop, inbo…
changhansung May 14, 2026
e8f646d
feat(quickstart): multi-platform UX — Both option + Add another platform
changhansung May 14, 2026
0acc141
fix: reviewer findings — additional adapter completeness + .env token…
changhansung May 14, 2026
566ba91
feat(knowledge): add batch backup + fleet health check skills
changhansung May 15, 2026
e601e79
fix(knowledge): skip own instance in batch backup to avoid collision
changhansung May 15, 2026
d67c0a5
fix: wrap startSharedAdapter + registerBotCommands in try-catch
changhansung May 15, 2026
a6b087a
feat: auto-create per-platform general instances for multi-channel
changhansung May 15, 2026
5b552df
feat: multi-adapter general instance routing
changhansung May 15, 2026
5f79ac9
fix: support channels[] array for topicMode detection and adapter sta…
changhansung May 15, 2026
3516e35
fix: channels[] mode — always set channel fallback + per-adapter grou…
changhansung May 15, 2026
f54c119
feat(cli): add Source column (TG/DC/—) to agend ls
changhansung May 15, 2026
9182f94
Merge branch 'fix/ls-source-column' into discord-ux
changhansung May 15, 2026
ebddb7e
chore: remove dev2 steering file
changhansung May 15, 2026
19f8bb1
fix: per-adapter access control in handleInboundMessage
changhansung May 15, 2026
fb6e44e
fix: channels[] array support — saveFleetConfig, notifications, bot c…
changhansung May 15, 2026
fbe48b7
fix: general-telegram replies to correct platform
changhansung May 15, 2026
e3982c3
fix: handleGeneralCommand replies to correct adapter
changhansung May 15, 2026
8cdc856
fix: per-adapter routing for all 10 P0+P1 issues
changhansung May 15, 2026
d4c13f4
fix: per-instance groupId routing
changhansung May 15, 2026
65121fc
refactor: introduce AdapterWorld class
changhansung May 18, 2026
a018428
refactor: fleet-manager fully uses AdapterWorld for per-instance routing
changhansung May 18, 2026
a995125
fix: strip @BotUsername from Telegram classic commands
changhansung May 18, 2026
b4f0dac
fix: pass stripped text to group classic handler + @mention as /chat …
changhansung May 18, 2026
77d2cdc
fix: create_instance creates topic on caller's world (not always prim…
changhansung May 18, 2026
e7cbe61
fix: /status /restart /sysinfo work in TG general topic, remove /upda…
changhansung May 18, 2026
51ac615
feat: /ctx text command works in any Telegram/Discord topic
changhansung May 18, 2026
2d09cee
fix: bind classic instance adapter on every message (not just /start)
changhansung May 18, 2026
663a165
fix: agend ls classic instance names match runtime (apply sanitizeIns…
changhansung May 18, 2026
adc2c99
fix: scheduler runCatchUp parses SQLite datetime as UTC (prevents dup…
changhansung May 18, 2026
8ee2479
feat: auto-detect new groups/servers and notify admin for approval
changhansung May 19, 2026
e95512a
feat: Discord adapter reads forwarded messages and embeds
changhansung May 19, 2026
9e6513e
feat: forward attachments (images) from Discord message snapshots
changhansung May 19, 2026
405d712
fix: support multiple photo attachments (not just first)
changhansung May 19, 2026
f02e45e
fix: collab mode align with /chat — no double download, /raw block, e…
changhansung May 19, 2026
c8029b7
chore: remove accidentally committed files
changhansung May 20, 2026
895dea5
feat: add Antigravity CLI backend (agy)
changhansung May 20, 2026
56dac51
fix: antigravity backend — namespaced MCP keys, cleanup, remove dead …
changhansung May 20, 2026
5d792a5
fix: add antigravity to backend schema enums (MCP + web-api)
changhansung May 20, 2026
f5f8f1a
perf: increase startup concurrency to 10, reduce stagger to 500ms
changhansung May 20, 2026
95e0fec
fix: Telegram polling auto-reconnect on transient errors (network/tim…
changhansung May 20, 2026
a49b370
fix: force IPv4 DNS resolution (fixes IPv6 timeout in corporate/WSL)
changhansung May 20, 2026
fbbde2e
fix: TG classic — only trigger on own bot @mention + photo-only messa…
changhansung May 20, 2026
e081558
fix: restore 📸 react for /chat with photo attachment
changhansung May 20, 2026
4583f85
fix: Discord classic bot 📸 react uses channelId (threadId) not guildId
changhansung May 20, 2026
800ecce
fix: use Telegram-compatible emoji for reactions (👌 for photo, 👍 for …
changhansung May 20, 2026
6ad62c3
fix: agend ls Source column detects TG/DC for classic instances + fle…
changhansung May 20, 2026
b02809f
feat: fleet.log rotation + staggered restart notifications
changhansung May 21, 2026
71ad7d5
fix: multiple attachments support + classic instance hot-reload prote…
changhansung May 22, 2026
fb5a6d6
docs: fleet knowledge — image subagent rule, startup steering, instan…
changhansung May 22, 2026
16a6aab
docs: update install instructions to @songsid/agend
changhansung May 22, 2026
37d6cd3
chore: add install.sh to repo root for GitHub Pages
changhansung May 22, 2026
583984f
chore: add .nojekyll for GitHub Pages static serving
changhansung May 22, 2026
4565ea8
feat: install.sh includes discord plugin
changhansung May 22, 2026
6b9d143
fix: ensure nvm loads in login shells + hint for new terminals
changhansung May 22, 2026
844b645
fix: plugin lookup tries @songsid scope first, then @suzuke fallback
changhansung May 22, 2026
32b0ad8
fix: unique filenames in downloadAttachment to prevent race condition
changhansung May 22, 2026
f8b9cf4
fix: install.sh auto-detect sudo for system-level npm
changhansung May 22, 2026
ffc0842
fix: install.sh removes old @suzuke/agend before installing @songsid
changhansung May 22, 2026
05ecb53
fix: replace remaining @suzuke references with @songsid in source code
changhansung May 22, 2026
c567c45
fix: revert discord plugin imports to @suzuke for local dev (publish …
changhansung May 22, 2026
13ccdde
feat: add publish.sh script (auto build + swap + publish + revert)
changhansung May 23, 2026
6a10085
feat: add GitHub Actions CI/CD — ci, publish, gitleaks workflows
changhansung May 23, 2026
4599f70
chore: remove session files (should not be in repo)
changhansung May 23, 2026
5af9edc
chore: add session file patterns to .gitignore
changhansung May 23, 2026
2d65d84
chore: remove .kiro/steering from repo + add to .gitignore
changhansung May 23, 2026
590f15c
docs: fix Kiro CLI install command (brew → official install script)
changhansung May 23, 2026
59d5c6c
fix: publish workflow — correct peerDependencies version for discord …
changhansung May 23, 2026
790e27d
fix: install.sh auto-install build-essential for native modules
changhansung May 23, 2026
31f8eca
fix: collab mode chat log includes attachment filenames
changhansung May 23, 2026
54a89a0
feat: complete agend update command — handles sudo, nvm, service, res…
changhansung May 23, 2026
e8dac61
fix(update): nvm-aware verify path, remove dead code, plugin version …
changhansung May 23, 2026
c9b2be5
docs: add general knowledge — update/restart, model names, config val…
changhansung May 23, 2026
7518830
fix(discord): stop treating stickers as photo attachments
changhansung May 23, 2026
483dd49
refactor: unify daemon.log to use rotation (same as fleet.log)
changhansung May 23, 2026
1f09063
fix: publish workflow — use npm install (not ci) for discord plugin (…
changhansung May 23, 2026
4b162b5
fix: install.sh shows discord plugin version in log
changhansung May 23, 2026
74348c1
feat: add access mode 'open' — allows all users without allowlist
changhansung May 25, 2026
47ab0ac
docs: add access mode reference to general knowledge
changhansung May 25, 2026
15342a5
fix: run daemon-reload before systemctl restart/start after update
changhansung May 25, 2026
9fa642f
fix: remove stale context rotation references from agent prompts
changhansung May 27, 2026
d72f332
feat: add model support to classicBot.yaml
changhansung May 28, 2026
8dd370d
perf: parallel instance stop with concurrency 5 + increase systemd ti…
changhansung May 29, 2026
ecc8283
feat: configurable context_lines per classic channel
changhansung May 29, 2026
3b828bf
fix: use new binary for service install during update
changhansung May 29, 2026
d268bfc
fix: allow context_lines=0 to disable chat log injection
changhansung May 29, 2026
a2b8865
fix: symlink agend/node to /usr/local/bin after nvm install
changhansung Jun 1, 2026
340f2b4
fix: initialize SUDO variable early to prevent unbound error
changhansung Jun 1, 2026
b122e16
feat: IPC + adapter auto-reconnect with infinite retry
changhansung Jun 2, 2026
58af349
Revert "feat: IPC + adapter auto-reconnect with infinite retry"
changhansung Jun 2, 2026
5f2b360
Revert "Revert "feat: IPC + adapter auto-reconnect with infinite retry""
changhansung Jun 2, 2026
a0e69ac
fix: kill old fleet process before restart in agend update
changhansung Jun 2, 2026
7fdbca0
fix: use PSS instead of RSS for memory reporting in agend ls
changhansung Jun 2, 2026
6bcf4d8
feat: show instance count and fleet memory total in agend ls footer
changhansung Jun 2, 2026
e3c829f
fix: only create /usr/local/bin symlinks when running as root
changhansung Jun 2, 2026
909d5ca
feat: workspace git init + /agent endpoint auth bypass
changhansung Jun 3, 2026
a2aaa79
feat: beta update channel support
changhansung Jun 3, 2026
a3d9f7d
feat: agy backend improvements — non-hidden symlink, .agents/ MCP con…
changhansung Jun 3, 2026
6d7f0b1
feat: antigravity backend defaults to CLI mode, drops MCP config
changhansung Jun 3, 2026
4e3e96b
fix: agy reads .agents/agents.md (lowercase)
changhansung Jun 3, 2026
ea8edfd
refactor: use real directory instead of symlink for agy workspace
changhansung Jun 3, 2026
18aad3f
docs: P0+P1 documentation update (antigravity, beta channel, reconnec…
changhansung Jun 5, 2026
b976bff
docs: P2 — sync zh-TW translations + fix CHANGELOG date
changhansung Jun 5, 2026
cddc1bc
chore: change default context_lines from 10 to 5
changhansung Jun 5, 2026
a93581d
fix: allow silence for cross-instance messages (silence = agreement)
changhansung Jun 5, 2026
e606dfd
feat: agy --model flag + gemini-cli deprecated warning
changhansung Jun 8, 2026
377c933
Merge remote-tracking branch 'origin/main'
changhansung Jun 8, 2026
3d273b1
fix: move 👀 auto-react before processAttachments for instant feedback
changhansung Jun 9, 2026
f828249
fix: react before setTopicIcon/archive to avoid Discord queue delay
changhansung Jun 9, 2026
c018d14
perf(discord): react() uses single REST PUT instead of 3 API calls
changhansung Jun 9, 2026
f473342
fix: add reset-failed before start in agend update restart
changhansung Jun 10, 2026
04a7058
fix: use threadId for Discord react (chatId is guild ID, not channel)
changhansung Jun 10, 2026
21c6289
fix: use thread_id for Discord message_queued/delivered react
changhansung Jun 10, 2026
9133cd5
docs: update model skills — use CLI commands to discover models, add agy
changhansung Jun 10, 2026
a8377fe
docs: kiro-cli model discovery via /model in tmux
changhansung Jun 10, 2026
2c274a2
refactor: split general-knowledge into steering + skills
changhansung Jun 10, 2026
0279137
docs: update CHANGELOG with v0.0.17 beta changes
changhansung Jun 11, 2026
9eec0e7
release: v0.0.17
changhansung Jun 11, 2026
a00991b
feat: skip incompatible model when backend doesn't recognize it
changhansung Jun 11, 2026
df1d482
release: v0.0.18
changhansung Jun 11, 2026
2a6c16e
docs: agy model names don't include effort suffix (Medium/High/Low)
changhansung Jun 11, 2026
90a4ee5
release: v0.0.19
changhansung Jun 11, 2026
b3741de
fix: classic instance reply tool resolves channelId via fallback
changhansung Jun 12, 2026
333d0d4
feat: expose user_id in inbound message format for mention support
changhansung Jun 12, 2026
ade2534
release: v0.0.20
changhansung Jun 12, 2026
94498ee
feat: add mention rules to fleet instructions
changhansung Jun 12, 2026
c73d3f0
release: v0.0.21
changhansung Jun 12, 2026
61356f7
fix: allow reply tool to reach fleet-manager even without lastChatId
changhansung Jun 12, 2026
78fdf6d
release: v0.0.22
changhansung Jun 12, 2026
7e89b4d
fix: handle non-array allowed_guilds/groups/users in classicBot.yaml
changhansung Jun 12, 2026
9359c60
fix: TG classicBot commands targeted at other bots are now ignored
changhansung Jun 12, 2026
aae6e89
debug: add TG classic mention check log
changhansung Jun 12, 2026
6cf1ccc
debug: change mention check log to info level
changhansung Jun 12, 2026
b39ad34
debug: add entry + access control logs for TG classic troubleshooting
changhansung Jun 12, 2026
7b0b834
fix: primary adapter started event must set botUsername + register be…
changhansung Jun 12, 2026
5ea2cd1
fix: TG classic mode — restrict /start, /stop, /raw to admin_users
changhansung Jun 12, 2026
956ff7c
docs: add permissions matrix (Discord + Telegram × fleet + classicBot)
changhansung Jun 12, 2026
e3bb49a
docs: complete permissions matrix with all commands and access flow
changhansung Jun 12, 2026
a8f3ff1
docs: TG private /stop requires admin (align doc with code)
changhansung Jun 12, 2026
b98da79
chore: remove debug logs from TG classic troubleshooting
changhansung Jun 12, 2026
be3a76a
release: v0.0.23
changhansung Jun 12, 2026
ef1f0e0
feat: crash recovery + startup priority (Issue #1 Phase 1)
changhansung Jun 12, 2026
1fcac96
feat: add [Fleet] / [ClassicBot] prefix to slash command descriptions
changhansung Jun 13, 2026
d740f0f
ci: auto-create GitHub Release with generated notes on stable tag
changhansung Jun 13, 2026
72fcaaf
feat: daily update check, /update detached restart, doctor expansion
changhansung Jun 13, 2026
e0c4074
Merge pull request #3 from songsid/feat/service-robustness
changhansung Jun 13, 2026
9f2fdb5
feat: doctor checks for service Restart policy and daemon-reload
changhansung Jun 13, 2026
bc4c8ac
Merge pull request #4 from songsid/feat/doctor-service-check
changhansung Jun 13, 2026
5cf1bb3
feat: systemd watchdog + general startup failure notification
changhansung Jun 13, 2026
dc72dec
Merge pull request #5 from songsid/feat/watchdog-and-failure-notify
changhansung Jun 13, 2026
5caa8e5
fix: update message uses 'agend start' + skip empty bot messages in c…
changhansung Jun 15, 2026
4d05621
Merge pull request #9 from songsid/fix/update-msg-and-collab-empty-log
changhansung Jun 15, 2026
78491f5
feat: Telegram Rich Messages support (Bot API 10.1)
changhansung Jun 15, 2026
237c3fe
Merge pull request #10 from songsid/feat/telegram-rich-messages
changhansung Jun 15, 2026
a7daa80
docs: add tmux Ctrl+C unstick procedure to fleet-health skill
changhansung Jun 15, 2026
19295d6
Merge pull request #11 from songsid/docs/tmux-unstick
changhansung Jun 15, 2026
cb9c800
feat: add /update and /doctor to TG bot menu + /doctor handler
changhansung Jun 15, 2026
abf3d24
Merge pull request #12 from songsid/feat/tg-update-doctor-commands
changhansung Jun 15, 2026
6850ea4
feat: add /update and /doctor Discord slash commands (admin only)
changhansung Jun 15, 2026
f545995
Merge pull request #13 from songsid/feat/discord-update-doctor
changhansung Jun 15, 2026
ecfa046
fix: /doctor uses agend backend doctor with fleet default
changhansung Jun 15, 2026
7c86826
Merge pull request #14 from songsid/fix/doctor-command-path
changhansung Jun 15, 2026
e135e22
feat: notify General when non-admin user is rejected from /start or /…
changhansung Jun 15, 2026
ad8cdbc
Merge pull request #15 from songsid/feat/notify-general-on-admin-reject
changhansung Jun 15, 2026
0f539fe
docs: add kiro-cli session storage path to session-management skill
changhansung Jun 15, 2026
93b0c04
Merge pull request #16 from songsid/docs/kiro-session-path
changhansung Jun 15, 2026
0e10789
fix: agend update detects and removes stale npm link before install
changhansung Jun 15, 2026
183831e
Merge pull request #17 from songsid/fix/update-detect-link
changhansung Jun 15, 2026
f862bee
fix: NotifyAccess=all + TimeoutStartSec=0 for 50+ instance fleets
changhansung Jun 15, 2026
7000afc
Merge pull request #18 from songsid/fix/notify-access-all
changhansung Jun 15, 2026
b71bfd0
feat: /status and /sysinfo use markdown tables for rich formatting
changhansung Jun 15, 2026
3b4f492
Merge pull request #19 from songsid/feat/status-sysinfo-rich-table
changhansung Jun 15, 2026
f7324ba
fix: install.sh removes npm-linked @suzuke/agend via readlink fallbac…
changhansung Jun 15, 2026
ee9039e
Merge pull request #21 from songsid/fix/install-remove-npm-link
changhansung Jun 15, 2026
d466458
fix: kiro 'having trouble responding' error detection
changhansung Jun 15, 2026
26cd5c8
Merge pull request #22 from songsid/fix/sysinfo-format-and-kiro-error
changhansung Jun 15, 2026
46f34ff
fix: workspace path guard + suppress unbound topic msg in classic groups
changhansung Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 5 additions & 25 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,38 +1,18 @@
name: CI

on:
pull_request:
push:
tags:
- 'v*'

env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
branches: [main]
pull_request:
branches: [main]

jobs:
test:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
node-version: 22
- run: npm ci
- run: npx tsc --noEmit
- run: npm test

publish:
needs: test
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 24
registry-url: https://registry.npmjs.org
- run: npm ci
- run: npm publish --provenance --access public
16 changes: 16 additions & 0 deletions .github/workflows/gitleaks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
name: Gitleaks

on:
pull_request:
branches: [main]

jobs:
scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
64 changes: 64 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
name: Publish

on:
push:
tags: ['v*']

jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
registry-url: https://registry.npmjs.org
- run: npm ci
- run: npx tsc --noEmit
- run: npm run build

# Publish main package as @songsid/agend
- name: Set version from tag
run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV
- name: Determine npm tag
run: |
if [[ "$VERSION" == *-beta* ]]; then
echo "NPM_TAG=beta" >> $GITHUB_ENV
else
echo "NPM_TAG=latest" >> $GITHUB_ENV
fi
- name: Swap package name and version
run: |
sed -i 's/"name": "@suzuke\/agend"/"name": "@songsid\/agend"/' package.json
sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" package.json
- run: npm publish --access public --tag ${{ env.NPM_TAG }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

# Publish Discord plugin as @songsid/agend-plugin-discord
- name: Build Discord plugin
working-directory: plugins/agend-plugin-discord
run: |
npm install
npm run build
- name: Swap Discord plugin names
working-directory: plugins/agend-plugin-discord
run: |
sed -i 's/"name": "@suzuke\/agend-plugin-discord"/"name": "@songsid\/agend-plugin-discord"/' package.json
sed -i "s/\"version\": \".*\"/\"version\": \"$VERSION\"/" package.json
sed -i 's/@suzuke\/agend/@songsid\/agend/g' package.json
sed -i 's/">=1.13.0"/">='$VERSION'"/' package.json
find dist -name '*.js' -exec sed -i 's/@suzuke\/agend/@songsid\/agend/g' {} +
find dist -name '*.d.ts' -exec sed -i 's/@suzuke\/agend/@songsid\/agend/g' {} +
- name: Publish Discord plugin
working-directory: plugins/agend-plugin-discord
run: npm publish --access public --tag ${{ env.NPM_TAG }}
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}

# Create GitHub Release with auto-generated notes from merged PRs
- name: Create GitHub Release
if: "!contains(env.VERSION, 'beta')"
run: gh release create "v$VERSION" --generate-notes --title "v$VERSION"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
11 changes: 11 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,14 @@ website/.astro/
# E2E test results (generated by vitest in VM, rsynced back)
e2e/results/
.kiro/settings/mcp.json
plugins/agend-plugin-discord/package-lock.json

# NPM auth (generated during publish, auto-cleaned)
.npmrc

# Session files (Claude Code / OpenCode)
*.session.json
20[0-9][0-9][01][0-9][0-3][0-9].json
opencode.json
.kiro/settings/lsp.json
.kiro/steering/
198 changes: 198 additions & 0 deletions .kiro/settings/lsp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
{
"languages": {
"typescript": {
"name": "typescript-language-server",
"command": "typescript-language-server",
"args": [
"--stdio"
],
"file_extensions": [
"ts",
"js",
"tsx",
"jsx"
],
"project_patterns": [
"package.json",
"tsconfig.json"
],
"exclude_patterns": [
"**/node_modules/**",
"**/dist/**"
],
"multi_workspace": false,
"initialization_options": {
"preferences": {
"disableSuggestions": false
}
},
"request_timeout_secs": 60
},
"ruby": {
"name": "solargraph",
"command": "solargraph",
"args": [
"stdio"
],
"file_extensions": [
"rb"
],
"project_patterns": [
"Gemfile",
"Rakefile"
],
"exclude_patterns": [
"**/vendor/**",
"**/tmp/**"
],
"multi_workspace": false,
"initialization_options": {},
"request_timeout_secs": 60
},
"rust": {
"name": "rust-analyzer",
"command": "rust-analyzer",
"args": [],
"file_extensions": [
"rs"
],
"project_patterns": [
"Cargo.toml"
],
"exclude_patterns": [
"**/target/**"
],
"multi_workspace": false,
"initialization_options": {
"cargo": {
"buildScripts": {
"enable": true
}
},
"diagnostics": {
"enable": true,
"enableExperimental": true
},
"workspace": {
"symbol": {
"search": {
"scope": "workspace"
}
}
}
},
"request_timeout_secs": 60
},
"java": {
"name": "jdtls",
"command": "jdtls",
"args": [],
"file_extensions": [
"java"
],
"project_patterns": [
"pom.xml",
"build.gradle",
"build.gradle.kts",
".project"
],
"exclude_patterns": [
"**/target/**",
"**/build/**",
"**/.gradle/**"
],
"multi_workspace": false,
"initialization_options": {
"settings": {
"java": {
"compile": {
"nullAnalysis": {
"mode": "automatic"
}
},
"configuration": {
"annotationProcessing": {
"enabled": true
}
}
}
}
},
"request_timeout_secs": 60
},
"python": {
"name": "pyright",
"command": "pyright-langserver",
"args": [
"--stdio"
],
"file_extensions": [
"py"
],
"project_patterns": [
"pyproject.toml",
"setup.py",
"requirements.txt",
"pyrightconfig.json"
],
"exclude_patterns": [
"**/__pycache__/**",
"**/venv/**",
"**/.venv/**",
"**/.pytest_cache/**"
],
"multi_workspace": false,
"initialization_options": {},
"request_timeout_secs": 60
},
"go": {
"name": "gopls",
"command": "gopls",
"args": [],
"file_extensions": [
"go"
],
"project_patterns": [
"go.mod",
"go.sum"
],
"exclude_patterns": [
"**/vendor/**"
],
"multi_workspace": false,
"initialization_options": {
"usePlaceholders": true,
"completeUnimported": true
},
"request_timeout_secs": 60
},
"cpp": {
"name": "clangd",
"command": "clangd",
"args": [
"--background-index"
],
"file_extensions": [
"cpp",
"cc",
"cxx",
"c",
"h",
"hpp",
"hxx"
],
"project_patterns": [
"CMakeLists.txt",
"compile_commands.json",
"Makefile"
],
"exclude_patterns": [
"**/build/**",
"**/cmake-build-**/**"
],
"multi_workspace": false,
"initialization_options": {},
"request_timeout_secs": 60
}
}
}
8 changes: 0 additions & 8 deletions .kiro/settings/mcp.json

This file was deleted.

Loading