hungry-ghost-hive 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -4
- package/dist/agents/base-agent.d.ts.map +1 -1
- package/dist/agents/base-agent.js +4 -2
- package/dist/agents/base-agent.js.map +1 -1
- package/dist/agents/base-agent.test.d.ts +2 -0
- package/dist/agents/base-agent.test.d.ts.map +1 -0
- package/dist/agents/base-agent.test.js +376 -0
- package/dist/agents/base-agent.test.js.map +1 -0
- package/dist/agents/senior.d.ts +0 -1
- package/dist/agents/senior.d.ts.map +1 -1
- package/dist/agents/senior.js +11 -86
- package/dist/agents/senior.js.map +1 -1
- package/dist/agents/tech-lead.d.ts.map +1 -1
- package/dist/agents/tech-lead.js +16 -17
- package/dist/agents/tech-lead.js.map +1 -1
- package/dist/cli/commands/assign.d.ts.map +1 -1
- package/dist/cli/commands/assign.js +19 -2
- package/dist/cli/commands/assign.js.map +1 -1
- package/dist/cli/commands/manager.d.ts.map +1 -1
- package/dist/cli/commands/manager.js +43 -13
- package/dist/cli/commands/manager.js.map +1 -1
- package/dist/cli/commands/my-stories.js +5 -1
- package/dist/cli/commands/my-stories.js.map +1 -1
- package/dist/cli/commands/req.d.ts.map +1 -1
- package/dist/cli/commands/req.js +16 -5
- package/dist/cli/commands/req.js.map +1 -1
- package/dist/cli/commands/status.js +36 -9
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/dashboard/index.d.ts +5 -0
- package/dist/cli/dashboard/index.d.ts.map +1 -1
- package/dist/cli/dashboard/index.js +13 -1
- package/dist/cli/dashboard/index.js.map +1 -1
- package/dist/cli/dashboard/index.test.d.ts +2 -0
- package/dist/cli/dashboard/index.test.d.ts.map +1 -0
- package/dist/cli/dashboard/index.test.js +85 -0
- package/dist/cli/dashboard/index.test.js.map +1 -0
- package/dist/cli-runtimes/index.d.ts +2 -2
- package/dist/cli-runtimes/index.d.ts.map +1 -1
- package/dist/cli-runtimes/index.js +1 -1
- package/dist/cli-runtimes/index.js.map +1 -1
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +4 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/context-files/generator.d.ts +1 -1
- package/dist/context-files/generator.d.ts.map +1 -1
- package/dist/context-files/generator.js +3 -3
- package/dist/context-files/generator.js.map +1 -1
- package/dist/db/client.d.ts +1 -0
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +14 -2
- package/dist/db/client.js.map +1 -1
- package/dist/db/dao/__tests__/agent.sqlite-dao.test.js +2 -2
- package/dist/db/dao/__tests__/agent.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/dao-broader.sqlite-dao.test.js +110 -31
- package/dist/db/dao/__tests__/dao-broader.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/dao-interface.sqlite-dao.test.js +5 -5
- package/dist/db/dao/__tests__/dao-interface.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/edge-cases.sqlite-dao.test.js +11 -8
- package/dist/db/dao/__tests__/edge-cases.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/escalation.sqlite-dao.test.js +4 -4
- package/dist/db/dao/__tests__/escalation.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/helpers.d.ts.map +1 -1
- package/dist/db/dao/__tests__/helpers.js +1 -0
- package/dist/db/dao/__tests__/helpers.js.map +1 -1
- package/dist/db/dao/__tests__/hive-dao.test.js +2 -2
- package/dist/db/dao/__tests__/hive-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/leveldb-dao.test.js +7 -7
- package/dist/db/dao/__tests__/leveldb-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/leveldb-helpers.d.ts.map +1 -1
- package/dist/db/dao/__tests__/leveldb-helpers.js +1 -1
- package/dist/db/dao/__tests__/leveldb-helpers.js.map +1 -1
- package/dist/db/dao/__tests__/log.sqlite-dao.test.js +9 -5
- package/dist/db/dao/__tests__/log.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/message.sqlite-dao.test.js +3 -3
- package/dist/db/dao/__tests__/message.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/pull-request.sqlite-dao.test.js +3 -3
- package/dist/db/dao/__tests__/pull-request.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/requirement.sqlite-dao.test.js +27 -2
- package/dist/db/dao/__tests__/requirement.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/story.sqlite-dao.test.js +4 -4
- package/dist/db/dao/__tests__/story.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/__tests__/team.sqlite-dao.test.js +2 -2
- package/dist/db/dao/__tests__/team.sqlite-dao.test.js.map +1 -1
- package/dist/db/dao/hive-dao.d.ts +4 -4
- package/dist/db/dao/hive-dao.d.ts.map +1 -1
- package/dist/db/dao/hive-dao.js +4 -4
- package/dist/db/dao/hive-dao.js.map +1 -1
- package/dist/db/dao/index.d.ts +7 -7
- package/dist/db/dao/index.d.ts.map +1 -1
- package/dist/db/dao/index.js +3 -2
- package/dist/db/dao/index.js.map +1 -1
- package/dist/db/dao/interfaces/agent.dao.d.ts +2 -3
- package/dist/db/dao/interfaces/agent.dao.d.ts.map +1 -1
- package/dist/db/dao/interfaces/escalation.dao.d.ts +2 -3
- package/dist/db/dao/interfaces/escalation.dao.d.ts.map +1 -1
- package/dist/db/dao/interfaces/index.d.ts +10 -10
- package/dist/db/dao/interfaces/index.d.ts.map +1 -1
- package/dist/db/dao/interfaces/log.dao.d.ts +1 -2
- package/dist/db/dao/interfaces/log.dao.d.ts.map +1 -1
- package/dist/db/dao/interfaces/pull-request.dao.d.ts +2 -3
- package/dist/db/dao/interfaces/pull-request.dao.d.ts.map +1 -1
- package/dist/db/dao/interfaces/requirement.dao.d.ts +2 -3
- package/dist/db/dao/interfaces/requirement.dao.d.ts.map +1 -1
- package/dist/db/dao/interfaces/story.dao.d.ts +2 -3
- package/dist/db/dao/interfaces/story.dao.d.ts.map +1 -1
- package/dist/db/dao/interfaces/team.dao.d.ts +2 -3
- package/dist/db/dao/interfaces/team.dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/agent.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/agent.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/agent.leveldb-dao.js +2 -4
- package/dist/db/dao/leveldb/agent.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/escalation.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/escalation.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/escalation.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/hive-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/hive-dao.js +5 -5
- package/dist/db/dao/leveldb/hive-dao.js.map +1 -1
- package/dist/db/dao/leveldb/index.d.ts +6 -6
- package/dist/db/dao/leveldb/index.d.ts.map +1 -1
- package/dist/db/dao/leveldb/index.js +5 -5
- package/dist/db/dao/leveldb/index.js.map +1 -1
- package/dist/db/dao/leveldb/log.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/log.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/log.leveldb-dao.js +2 -6
- package/dist/db/dao/leveldb/log.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/message.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/message.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/message.leveldb-dao.js +1 -3
- package/dist/db/dao/leveldb/message.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/pull-request.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/pull-request.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/pull-request.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/requirement.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/requirement.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/requirement.leveldb-dao.js +3 -0
- package/dist/db/dao/leveldb/requirement.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/sort.d.ts.map +1 -1
- package/dist/db/dao/leveldb/sort.js.map +1 -1
- package/dist/db/dao/leveldb/story.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/story.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/story.leveldb-dao.js +14 -6
- package/dist/db/dao/leveldb/story.leveldb-dao.js.map +1 -1
- package/dist/db/dao/leveldb/team.leveldb-dao.d.ts +1 -1
- package/dist/db/dao/leveldb/team.leveldb-dao.d.ts.map +1 -1
- package/dist/db/dao/leveldb/team.leveldb-dao.js.map +1 -1
- package/dist/db/dao/sqlite/agent.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/agent.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/agent.sqlite-dao.js +13 -5
- package/dist/db/dao/sqlite/agent.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/escalation.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/escalation.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/escalation.sqlite-dao.js +1 -1
- package/dist/db/dao/sqlite/escalation.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/index.d.ts +4 -4
- package/dist/db/dao/sqlite/index.d.ts.map +1 -1
- package/dist/db/dao/sqlite/index.js +4 -4
- package/dist/db/dao/sqlite/index.js.map +1 -1
- package/dist/db/dao/sqlite/log.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/log.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/log.sqlite-dao.js +1 -1
- package/dist/db/dao/sqlite/log.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/message.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/message.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/message.sqlite-dao.js +3 -1
- package/dist/db/dao/sqlite/message.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/pull-request.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/pull-request.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/pull-request.sqlite-dao.js +3 -1
- package/dist/db/dao/sqlite/pull-request.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/requirement.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/requirement.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/requirement.sqlite-dao.js +7 -3
- package/dist/db/dao/sqlite/requirement.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/story.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/story.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/story.sqlite-dao.js +18 -3
- package/dist/db/dao/sqlite/story.sqlite-dao.js.map +1 -1
- package/dist/db/dao/sqlite/team.sqlite-dao.d.ts +1 -1
- package/dist/db/dao/sqlite/team.sqlite-dao.d.ts.map +1 -1
- package/dist/db/dao/sqlite/team.sqlite-dao.js.map +1 -1
- package/dist/db/lock.js +2 -2
- package/dist/db/lock.js.map +1 -1
- package/dist/db/queries/heartbeat.d.ts.map +1 -1
- package/dist/db/queries/heartbeat.js +4 -2
- package/dist/db/queries/heartbeat.js.map +1 -1
- package/dist/db/queries/requirements.d.ts +2 -0
- package/dist/db/queries/requirements.d.ts.map +1 -1
- package/dist/db/queries/requirements.js +7 -3
- package/dist/db/queries/requirements.js.map +1 -1
- package/dist/db/queries/requirements.test.js +28 -0
- package/dist/db/queries/requirements.test.js.map +1 -1
- package/dist/db/queries/test-helpers.d.ts.map +1 -1
- package/dist/db/queries/test-helpers.js +1 -0
- package/dist/db/queries/test-helpers.js.map +1 -1
- package/dist/git/branches.test.js +2 -2
- package/dist/git/branches.test.js.map +1 -1
- package/dist/git/github.test.js +21 -25
- package/dist/git/github.test.js.map +1 -1
- package/dist/git/submodules.test.js +15 -26
- package/dist/git/submodules.test.js.map +1 -1
- package/dist/llm/index.d.ts +1 -1
- package/dist/llm/index.d.ts.map +1 -1
- package/dist/llm/index.js +2 -2
- package/dist/llm/index.js.map +1 -1
- package/dist/orchestrator/prompt-templates.d.ts.map +1 -1
- package/dist/orchestrator/prompt-templates.js +19 -5
- package/dist/orchestrator/prompt-templates.js.map +1 -1
- package/dist/orchestrator/prompt-templates.test.d.ts +2 -0
- package/dist/orchestrator/prompt-templates.test.d.ts.map +1 -0
- package/dist/orchestrator/prompt-templates.test.js +257 -0
- package/dist/orchestrator/prompt-templates.test.js.map +1 -0
- package/dist/orchestrator/scheduler.d.ts +7 -1
- package/dist/orchestrator/scheduler.d.ts.map +1 -1
- package/dist/orchestrator/scheduler.js +57 -21
- package/dist/orchestrator/scheduler.js.map +1 -1
- package/dist/orchestrator/scheduler.test.js +376 -16
- package/dist/orchestrator/scheduler.test.js.map +1 -1
- package/dist/state-detectors/factory.d.ts.map +1 -1
- package/dist/state-detectors/factory.js +1 -1
- package/dist/state-detectors/factory.js.map +1 -1
- package/dist/tmux/manager.d.ts.map +1 -1
- package/dist/tmux/manager.js +49 -18
- package/dist/tmux/manager.js.map +1 -1
- package/dist/utils/auto-merge.d.ts.map +1 -1
- package/dist/utils/auto-merge.js +6 -2
- package/dist/utils/auto-merge.js.map +1 -1
- package/dist/utils/cli-builder.js +1 -1
- package/dist/utils/cli-builder.js.map +1 -1
- package/dist/utils/paths.test.js +2 -2
- package/dist/utils/paths.test.js.map +1 -1
- package/dist/utils/story-id.d.ts +3 -1
- package/dist/utils/story-id.d.ts.map +1 -1
- package/dist/utils/story-id.js +38 -4
- package/dist/utils/story-id.js.map +1 -1
- package/dist/utils/story-id.test.d.ts +2 -0
- package/dist/utils/story-id.test.d.ts.map +1 -0
- package/dist/utils/story-id.test.js +62 -0
- package/dist/utils/story-id.test.js.map +1 -0
- package/dist/utils/timeout.test.js +9 -15
- package/dist/utils/timeout.test.js.map +1 -1
- package/package.json +1 -1
- package/src/agents/base-agent.test.ts +471 -0
- package/src/agents/base-agent.ts +5 -2
- package/src/agents/senior.ts +11 -99
- package/src/agents/tech-lead.ts +22 -18
- package/src/cli/commands/assign.ts +21 -2
- package/src/cli/commands/manager.ts +50 -16
- package/src/cli/commands/my-stories.ts +95 -77
- package/src/cli/commands/req.ts +24 -6
- package/src/cli/commands/status.ts +36 -9
- package/src/cli/dashboard/index.test.ts +105 -0
- package/src/cli/dashboard/index.ts +18 -1
- package/src/cli-runtimes/index.ts +3 -3
- package/src/config/schema.ts +10 -8
- package/src/context-files/generator.ts +4 -4
- package/src/db/client.ts +19 -2
- package/src/db/dao/__tests__/agent.sqlite-dao.test.ts +2 -2
- package/src/db/dao/__tests__/dao-broader.sqlite-dao.test.ts +110 -31
- package/src/db/dao/__tests__/dao-interface.sqlite-dao.test.ts +5 -5
- package/src/db/dao/__tests__/edge-cases.sqlite-dao.test.ts +23 -12
- package/src/db/dao/__tests__/escalation.sqlite-dao.test.ts +4 -4
- package/src/db/dao/__tests__/helpers.ts +4 -1
- package/src/db/dao/__tests__/hive-dao.test.ts +3 -3
- package/src/db/dao/__tests__/leveldb-dao.test.ts +8 -8
- package/src/db/dao/__tests__/leveldb-helpers.ts +1 -1
- package/src/db/dao/__tests__/log.sqlite-dao.test.ts +19 -9
- package/src/db/dao/__tests__/message.sqlite-dao.test.ts +9 -5
- package/src/db/dao/__tests__/pull-request.sqlite-dao.test.ts +3 -3
- package/src/db/dao/__tests__/requirement.sqlite-dao.test.ts +34 -2
- package/src/db/dao/__tests__/story.sqlite-dao.test.ts +4 -4
- package/src/db/dao/__tests__/team.sqlite-dao.test.ts +2 -2
- package/src/db/dao/hive-dao.ts +8 -8
- package/src/db/dao/index.ts +14 -14
- package/src/db/dao/interfaces/agent.dao.ts +8 -3
- package/src/db/dao/interfaces/escalation.dao.ts +7 -3
- package/src/db/dao/interfaces/index.ts +31 -10
- package/src/db/dao/interfaces/log.dao.ts +1 -2
- package/src/db/dao/interfaces/pull-request.dao.ts +7 -3
- package/src/db/dao/interfaces/requirement.dao.ts +7 -3
- package/src/db/dao/interfaces/story.dao.ts +7 -3
- package/src/db/dao/interfaces/team.dao.ts +2 -3
- package/src/db/dao/leveldb/agent.leveldb-dao.ts +13 -6
- package/src/db/dao/leveldb/escalation.leveldb-dao.ts +14 -3
- package/src/db/dao/leveldb/hive-dao.ts +9 -6
- package/src/db/dao/leveldb/index.ts +6 -6
- package/src/db/dao/leveldb/log.leveldb-dao.ts +7 -8
- package/src/db/dao/leveldb/message.leveldb-dao.ts +2 -4
- package/src/db/dao/leveldb/pull-request.leveldb-dao.ts +14 -3
- package/src/db/dao/leveldb/requirement.leveldb-dao.ts +16 -3
- package/src/db/dao/leveldb/sort.ts +16 -4
- package/src/db/dao/leveldb/story.leveldb-dao.ts +30 -9
- package/src/db/dao/leveldb/team.leveldb-dao.ts +5 -2
- package/src/db/dao/sqlite/agent.sqlite-dao.ts +31 -13
- package/src/db/dao/sqlite/escalation.sqlite-dao.ts +58 -24
- package/src/db/dao/sqlite/index.ts +4 -4
- package/src/db/dao/sqlite/log.sqlite-dao.ts +51 -23
- package/src/db/dao/sqlite/message.sqlite-dao.ts +15 -6
- package/src/db/dao/sqlite/pull-request.sqlite-dao.ts +78 -32
- package/src/db/dao/sqlite/requirement.sqlite-dao.ts +38 -12
- package/src/db/dao/sqlite/story.sqlite-dao.ts +95 -26
- package/src/db/dao/sqlite/team.sqlite-dao.ts +8 -4
- package/src/db/lock.ts +2 -2
- package/src/db/queries/heartbeat.ts +5 -2
- package/src/db/queries/requirements.test.ts +36 -0
- package/src/db/queries/requirements.ts +15 -9
- package/src/db/queries/test-helpers.ts +1 -0
- package/src/git/branches.test.ts +20 -8
- package/src/git/github.test.ts +48 -44
- package/src/git/submodules.test.ts +30 -27
- package/src/llm/index.ts +3 -3
- package/src/orchestrator/prompt-templates.test.ts +332 -0
- package/src/orchestrator/prompt-templates.ts +19 -5
- package/src/orchestrator/scheduler.test.ts +444 -17
- package/src/orchestrator/scheduler.ts +71 -29
- package/src/state-detectors/factory.ts +2 -2
- package/src/tmux/manager.ts +59 -20
- package/src/utils/auto-merge.ts +7 -2
- package/src/utils/cli-builder.ts +1 -1
- package/src/utils/paths.test.ts +3 -3
- package/src/utils/story-id.test.ts +77 -0
- package/src/utils/story-id.ts +46 -4
- package/src/utils/timeout.test.ts +155 -121
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
[](https://github.com/nikrich/hungry-ghost-hive/actions/workflows/ci.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/hungry-ghost-hive)
|
|
5
5
|
[](https://nodejs.org/)
|
|
6
|
-
[](LICENSE)
|
|
7
7
|
[](https://www.typescriptlang.org/)
|
|
8
8
|
[](https://codecov.io/gh/nikrich/hungry-ghost-hive)
|
|
9
9
|
|
|
@@ -296,10 +296,10 @@ models:
|
|
|
296
296
|
scaling:
|
|
297
297
|
junior_max_complexity: 3 # 1-3 → Junior
|
|
298
298
|
intermediate_max_complexity: 5 # 4-5 → Intermediate
|
|
299
|
-
senior_capacity: 20
|
|
299
|
+
senior_capacity: 20 # Story points before scaling up
|
|
300
300
|
refactor:
|
|
301
301
|
enabled: true
|
|
302
|
-
capacity_percent: 10
|
|
302
|
+
capacity_percent: 10 # Reserve up to 10% of feature capacity for refactor stories
|
|
303
303
|
allow_without_feature_work: true
|
|
304
304
|
|
|
305
305
|
# QA checks
|
|
@@ -405,6 +405,7 @@ We welcome contributions! Here's how to get started:
|
|
|
405
405
|
### Development Setup
|
|
406
406
|
|
|
407
407
|
1. **Clone and Install**:
|
|
408
|
+
|
|
408
409
|
```bash
|
|
409
410
|
git clone https://github.com/nikrich/hungry-ghost-hive.git
|
|
410
411
|
cd hungry-ghost-hive
|
|
@@ -412,6 +413,7 @@ We welcome contributions! Here's how to get started:
|
|
|
412
413
|
```
|
|
413
414
|
|
|
414
415
|
2. **Run Tests**:
|
|
416
|
+
|
|
415
417
|
```bash
|
|
416
418
|
npm test # Run all tests
|
|
417
419
|
npm run test:watch # Watch mode
|
|
@@ -477,7 +479,7 @@ git status # MUST show "up to date with origin"
|
|
|
477
479
|
|
|
478
480
|
## License
|
|
479
481
|
|
|
480
|
-
This project is licensed under the **Hungry Ghost
|
|
482
|
+
This project is licensed under the **Hungry Ghost Restricted License**. See the [LICENSE](./LICENSE) file for details.
|
|
481
483
|
|
|
482
484
|
### License Summary
|
|
483
485
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,SAAS,EACf,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAa,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-agent.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { updateAgent, } from '../db/queries/agents.js';
|
|
2
2
|
import { updateAgentHeartbeat } from '../db/queries/heartbeat.js';
|
|
3
3
|
import { createLog } from '../db/queries/logs.js';
|
|
4
|
+
/** Interval in ms between agent heartbeats */
|
|
5
|
+
const HEARTBEAT_INTERVAL_MS = 10000;
|
|
4
6
|
export class BaseAgent {
|
|
5
7
|
db;
|
|
6
8
|
provider;
|
|
@@ -50,10 +52,10 @@ export class BaseAgent {
|
|
|
50
52
|
startHeartbeat() {
|
|
51
53
|
// Send initial heartbeat
|
|
52
54
|
this.sendHeartbeat();
|
|
53
|
-
// Send heartbeat
|
|
55
|
+
// Send heartbeat at configured interval
|
|
54
56
|
this.heartbeatInterval = setInterval(() => {
|
|
55
57
|
this.sendHeartbeat();
|
|
56
|
-
},
|
|
58
|
+
}, HEARTBEAT_INTERVAL_MS);
|
|
57
59
|
}
|
|
58
60
|
sendHeartbeat() {
|
|
59
61
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-agent.js","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"AACA,OAAO,EACL,WAAW,GAIZ,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAkB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"base-agent.js","sourceRoot":"","sources":["../../src/agents/base-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-agent.test.d.ts","sourceRoot":"","sources":["../../src/agents/base-agent.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import initSqlJs from 'sql.js';
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
import { queryAll, queryOne } from '../db/client.js';
|
|
4
|
+
import { BaseAgent } from './base-agent.js';
|
|
5
|
+
// Mock LLM Provider
|
|
6
|
+
class MockLLMProvider {
|
|
7
|
+
name = 'mock-provider';
|
|
8
|
+
async complete(_messages, _options) {
|
|
9
|
+
return {
|
|
10
|
+
content: 'Mock response',
|
|
11
|
+
stopReason: 'end_turn',
|
|
12
|
+
usage: {
|
|
13
|
+
inputTokens: 100,
|
|
14
|
+
outputTokens: 50,
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
// Concrete implementation of BaseAgent for testing
|
|
20
|
+
class TestAgent extends BaseAgent {
|
|
21
|
+
getSystemPrompt() {
|
|
22
|
+
return 'Test system prompt';
|
|
23
|
+
}
|
|
24
|
+
async execute() {
|
|
25
|
+
// Simple execute implementation for testing
|
|
26
|
+
await this.chat('Test message');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
describe('BaseAgent', () => {
|
|
30
|
+
let db;
|
|
31
|
+
let provider;
|
|
32
|
+
let agentRow;
|
|
33
|
+
let context;
|
|
34
|
+
// Database migration for testing
|
|
35
|
+
const INITIAL_MIGRATION = `
|
|
36
|
+
CREATE TABLE IF NOT EXISTS agents (
|
|
37
|
+
id TEXT PRIMARY KEY,
|
|
38
|
+
type TEXT NOT NULL CHECK (type IN ('tech_lead', 'senior', 'intermediate', 'junior', 'qa')),
|
|
39
|
+
team_id TEXT,
|
|
40
|
+
tmux_session TEXT,
|
|
41
|
+
model TEXT,
|
|
42
|
+
status TEXT DEFAULT 'idle' CHECK (status IN ('idle', 'working', 'blocked', 'terminated')),
|
|
43
|
+
current_story_id TEXT,
|
|
44
|
+
memory_state TEXT,
|
|
45
|
+
last_seen TIMESTAMP,
|
|
46
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
47
|
+
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS agent_logs (
|
|
51
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
52
|
+
agent_id TEXT NOT NULL,
|
|
53
|
+
story_id TEXT,
|
|
54
|
+
event_type TEXT NOT NULL,
|
|
55
|
+
status TEXT,
|
|
56
|
+
message TEXT,
|
|
57
|
+
metadata TEXT,
|
|
58
|
+
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
59
|
+
);
|
|
60
|
+
`;
|
|
61
|
+
beforeEach(async () => {
|
|
62
|
+
const SQL = await initSqlJs();
|
|
63
|
+
db = new SQL.Database();
|
|
64
|
+
db.run('PRAGMA foreign_keys = ON');
|
|
65
|
+
db.run(INITIAL_MIGRATION);
|
|
66
|
+
provider = new MockLLMProvider();
|
|
67
|
+
agentRow = {
|
|
68
|
+
id: 'test-agent-1',
|
|
69
|
+
type: 'senior',
|
|
70
|
+
team_id: 'team-1',
|
|
71
|
+
tmux_session: 'test-session',
|
|
72
|
+
model: 'test-model',
|
|
73
|
+
status: 'idle',
|
|
74
|
+
current_story_id: null,
|
|
75
|
+
memory_state: null,
|
|
76
|
+
last_seen: null,
|
|
77
|
+
cli_tool: 'claude',
|
|
78
|
+
worktree_path: null,
|
|
79
|
+
created_at: '2024-01-01',
|
|
80
|
+
updated_at: '2024-01-01',
|
|
81
|
+
};
|
|
82
|
+
// Insert the agent into the database
|
|
83
|
+
db.run(`INSERT INTO agents (id, type, team_id, status) VALUES (?, ?, ?, ?)`, [
|
|
84
|
+
agentRow.id,
|
|
85
|
+
agentRow.type,
|
|
86
|
+
agentRow.team_id,
|
|
87
|
+
agentRow.status,
|
|
88
|
+
]);
|
|
89
|
+
context = {
|
|
90
|
+
db,
|
|
91
|
+
provider,
|
|
92
|
+
agentRow,
|
|
93
|
+
workDir: '/tmp/test',
|
|
94
|
+
config: {
|
|
95
|
+
maxRetries: 3,
|
|
96
|
+
checkpointThreshold: 10000,
|
|
97
|
+
pollInterval: 5000,
|
|
98
|
+
llmTimeoutMs: 30000,
|
|
99
|
+
llmMaxRetries: 3,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
afterEach(() => {
|
|
104
|
+
vi.clearAllTimers();
|
|
105
|
+
vi.restoreAllMocks();
|
|
106
|
+
});
|
|
107
|
+
describe('Construction and Initialization', () => {
|
|
108
|
+
it('should initialize with correct properties', () => {
|
|
109
|
+
const agent = new TestAgent(context);
|
|
110
|
+
expect(agent).toBeDefined();
|
|
111
|
+
});
|
|
112
|
+
it('should initialize memory state when not provided', () => {
|
|
113
|
+
const agent = new TestAgent(context);
|
|
114
|
+
const agentAny = agent;
|
|
115
|
+
expect(agentAny.memoryState).toBeDefined();
|
|
116
|
+
expect(agentAny.memoryState.conversationSummary).toBe('');
|
|
117
|
+
expect(agentAny.memoryState.context.blockers).toEqual([]);
|
|
118
|
+
expect(agentAny.memoryState.context.decisionsMade).toEqual([]);
|
|
119
|
+
});
|
|
120
|
+
it('should load existing memory state when provided', () => {
|
|
121
|
+
const existingMemory = {
|
|
122
|
+
conversationSummary: 'Previous summary',
|
|
123
|
+
context: {
|
|
124
|
+
blockers: ['blocker1'],
|
|
125
|
+
decisionsMade: ['decision1'],
|
|
126
|
+
},
|
|
127
|
+
checkpointTokens: 5000,
|
|
128
|
+
};
|
|
129
|
+
agentRow.memory_state = JSON.stringify(existingMemory);
|
|
130
|
+
db.run(`UPDATE agents SET memory_state = ? WHERE id = ?`, [
|
|
131
|
+
agentRow.memory_state,
|
|
132
|
+
agentRow.id,
|
|
133
|
+
]);
|
|
134
|
+
const agent = new TestAgent(context);
|
|
135
|
+
const agentAny = agent;
|
|
136
|
+
expect(agentAny.memoryState.conversationSummary).toBe('Previous summary');
|
|
137
|
+
expect(agentAny.memoryState.context.blockers).toContain('blocker1');
|
|
138
|
+
expect(agentAny.memoryState.context.decisionsMade).toContain('decision1');
|
|
139
|
+
});
|
|
140
|
+
it('should initialize messages with system prompt', () => {
|
|
141
|
+
const agent = new TestAgent(context);
|
|
142
|
+
const agentAny = agent;
|
|
143
|
+
expect(agentAny.messages).toHaveLength(1);
|
|
144
|
+
expect(agentAny.messages[0].role).toBe('system');
|
|
145
|
+
expect(agentAny.messages[0].content).toBe('Test system prompt');
|
|
146
|
+
});
|
|
147
|
+
it('should add memory context when resuming', () => {
|
|
148
|
+
const existingMemory = {
|
|
149
|
+
conversationSummary: 'Previous context',
|
|
150
|
+
context: { blockers: [], decisionsMade: [] },
|
|
151
|
+
checkpointTokens: 0,
|
|
152
|
+
};
|
|
153
|
+
agentRow.memory_state = JSON.stringify(existingMemory);
|
|
154
|
+
const agent = new TestAgent(context);
|
|
155
|
+
const agentAny = agent;
|
|
156
|
+
expect(agentAny.messages).toHaveLength(2);
|
|
157
|
+
expect(agentAny.messages[1].role).toBe('user');
|
|
158
|
+
expect(agentAny.messages[1].content).toContain('Previous context');
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('Status Transitions', () => {
|
|
162
|
+
it('should transition from idle to working when run is called', async () => {
|
|
163
|
+
const agent = new TestAgent(context);
|
|
164
|
+
await agent.run();
|
|
165
|
+
const result = queryOne(db, 'SELECT status FROM agents WHERE id = ?', [
|
|
166
|
+
agentRow.id,
|
|
167
|
+
]);
|
|
168
|
+
expect(result?.status).toBe('working');
|
|
169
|
+
});
|
|
170
|
+
it('should transition to blocked on error', async () => {
|
|
171
|
+
provider.complete = vi.fn().mockRejectedValue(new Error('Test error'));
|
|
172
|
+
const agent = new TestAgent(context);
|
|
173
|
+
await expect(agent.run()).rejects.toThrow('Test error');
|
|
174
|
+
const result = queryOne(db, 'SELECT status FROM agents WHERE id = ?', [
|
|
175
|
+
agentRow.id,
|
|
176
|
+
]);
|
|
177
|
+
expect(result?.status).toBe('blocked');
|
|
178
|
+
});
|
|
179
|
+
it('should log agent spawn event when run is called', async () => {
|
|
180
|
+
const agent = new TestAgent(context);
|
|
181
|
+
await agent.run();
|
|
182
|
+
const events = queryAll(db, 'SELECT event_type, message FROM agent_logs WHERE agent_id = ?', [agentRow.id]);
|
|
183
|
+
expect(events).toContainEqual(expect.objectContaining({
|
|
184
|
+
event_type: 'AGENT_SPAWNED',
|
|
185
|
+
message: expect.stringContaining('senior agent started'),
|
|
186
|
+
}));
|
|
187
|
+
});
|
|
188
|
+
it('should log termination event on error', async () => {
|
|
189
|
+
provider.complete = vi.fn().mockRejectedValue(new Error('Fatal error'));
|
|
190
|
+
const agent = new TestAgent(context);
|
|
191
|
+
await expect(agent.run()).rejects.toThrow();
|
|
192
|
+
const events = queryAll(db, 'SELECT event_type, message FROM agent_logs WHERE agent_id = ?', [agentRow.id]);
|
|
193
|
+
expect(events).toContainEqual(expect.objectContaining({
|
|
194
|
+
event_type: 'AGENT_TERMINATED',
|
|
195
|
+
message: expect.stringContaining('Fatal error'),
|
|
196
|
+
}));
|
|
197
|
+
});
|
|
198
|
+
});
|
|
199
|
+
describe('Chat and Token Management', () => {
|
|
200
|
+
it('should track token usage during chat', async () => {
|
|
201
|
+
const agent = new TestAgent(context);
|
|
202
|
+
const agentAny = agent;
|
|
203
|
+
await agentAny.chat('Test message');
|
|
204
|
+
expect(agentAny.totalTokens).toBe(150); // 100 input + 50 output
|
|
205
|
+
});
|
|
206
|
+
it('should accumulate tokens across multiple chat calls', async () => {
|
|
207
|
+
const agent = new TestAgent(context);
|
|
208
|
+
const agentAny = agent;
|
|
209
|
+
await agentAny.chat('Message 1');
|
|
210
|
+
await agentAny.chat('Message 2');
|
|
211
|
+
expect(agentAny.totalTokens).toBe(300); // 2 * (100 + 50)
|
|
212
|
+
});
|
|
213
|
+
it('should add user and assistant messages to conversation', async () => {
|
|
214
|
+
const agent = new TestAgent(context);
|
|
215
|
+
const agentAny = agent;
|
|
216
|
+
await agentAny.chat('User message');
|
|
217
|
+
expect(agentAny.messages).toHaveLength(3); // system + user + assistant
|
|
218
|
+
expect(agentAny.messages[1].role).toBe('user');
|
|
219
|
+
expect(agentAny.messages[1].content).toBe('User message');
|
|
220
|
+
expect(agentAny.messages[2].role).toBe('assistant');
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
describe('Checkpointing', () => {
|
|
224
|
+
it('should trigger checkpoint when token threshold is exceeded', async () => {
|
|
225
|
+
provider.complete = vi
|
|
226
|
+
.fn()
|
|
227
|
+
.mockResolvedValueOnce({
|
|
228
|
+
content: 'Response 1',
|
|
229
|
+
usage: { inputTokens: 6000, outputTokens: 5000 },
|
|
230
|
+
})
|
|
231
|
+
.mockResolvedValueOnce({
|
|
232
|
+
content: 'Checkpoint summary',
|
|
233
|
+
usage: { inputTokens: 100, outputTokens: 100 },
|
|
234
|
+
});
|
|
235
|
+
const agent = new TestAgent(context);
|
|
236
|
+
const agentAny = agent;
|
|
237
|
+
await agentAny.chat('Test message');
|
|
238
|
+
// Should have triggered checkpoint (threshold is 10000, we used 11000)
|
|
239
|
+
expect(agentAny.totalTokens).toBe(0); // Reset after checkpoint
|
|
240
|
+
expect(agentAny.memoryState.conversationSummary).toBe('Checkpoint summary');
|
|
241
|
+
});
|
|
242
|
+
it('should save checkpoint to database', async () => {
|
|
243
|
+
provider.complete = vi
|
|
244
|
+
.fn()
|
|
245
|
+
.mockResolvedValueOnce({
|
|
246
|
+
content: 'Response',
|
|
247
|
+
usage: { inputTokens: 6000, outputTokens: 5000 },
|
|
248
|
+
})
|
|
249
|
+
.mockResolvedValueOnce({
|
|
250
|
+
content: 'Checkpoint summary',
|
|
251
|
+
usage: { inputTokens: 100, outputTokens: 100 },
|
|
252
|
+
});
|
|
253
|
+
const agent = new TestAgent(context);
|
|
254
|
+
const agentAny = agent;
|
|
255
|
+
await agentAny.chat('Test message');
|
|
256
|
+
const result = queryOne(db, 'SELECT memory_state FROM agents WHERE id = ?', [agentRow.id]);
|
|
257
|
+
const memoryState = JSON.parse(result.memory_state);
|
|
258
|
+
expect(memoryState.conversationSummary).toBe('Checkpoint summary');
|
|
259
|
+
expect(memoryState.checkpointTokens).toBe(11000);
|
|
260
|
+
});
|
|
261
|
+
it('should reset messages after checkpoint but keep context', async () => {
|
|
262
|
+
provider.complete = vi
|
|
263
|
+
.fn()
|
|
264
|
+
.mockResolvedValueOnce({
|
|
265
|
+
content: 'Response',
|
|
266
|
+
usage: { inputTokens: 6000, outputTokens: 5000 },
|
|
267
|
+
})
|
|
268
|
+
.mockResolvedValueOnce({
|
|
269
|
+
content: 'Summary',
|
|
270
|
+
usage: { inputTokens: 100, outputTokens: 100 },
|
|
271
|
+
});
|
|
272
|
+
const agent = new TestAgent(context);
|
|
273
|
+
const agentAny = agent;
|
|
274
|
+
await agentAny.chat('Test message');
|
|
275
|
+
// After checkpoint: system prompt + context restoration
|
|
276
|
+
expect(agentAny.messages).toHaveLength(2);
|
|
277
|
+
expect(agentAny.messages[0].role).toBe('system');
|
|
278
|
+
expect(agentAny.messages[1].role).toBe('user');
|
|
279
|
+
expect(agentAny.messages[1].content).toContain('Previous context');
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
describe('Memory State Management', () => {
|
|
283
|
+
it('should add decision to memory state', () => {
|
|
284
|
+
const agent = new TestAgent(context);
|
|
285
|
+
const agentAny = agent;
|
|
286
|
+
agentAny.addDecision('Use TypeScript');
|
|
287
|
+
expect(agentAny.memoryState.context.decisionsMade).toContain('Use TypeScript');
|
|
288
|
+
});
|
|
289
|
+
it('should add blocker to memory state', () => {
|
|
290
|
+
const agent = new TestAgent(context);
|
|
291
|
+
const agentAny = agent;
|
|
292
|
+
agentAny.addBlocker('Waiting for API');
|
|
293
|
+
expect(agentAny.memoryState.context.blockers).toContain('Waiting for API');
|
|
294
|
+
});
|
|
295
|
+
it('should remove blocker from memory state', () => {
|
|
296
|
+
const agent = new TestAgent(context);
|
|
297
|
+
const agentAny = agent;
|
|
298
|
+
agentAny.addBlocker('Blocker 1');
|
|
299
|
+
agentAny.addBlocker('Blocker 2');
|
|
300
|
+
agentAny.removeBlocker('Blocker 1');
|
|
301
|
+
expect(agentAny.memoryState.context.blockers).not.toContain('Blocker 1');
|
|
302
|
+
expect(agentAny.memoryState.context.blockers).toContain('Blocker 2');
|
|
303
|
+
});
|
|
304
|
+
it('should set current task', () => {
|
|
305
|
+
const agent = new TestAgent(context);
|
|
306
|
+
const agentAny = agent;
|
|
307
|
+
agentAny.setCurrentTask('STORY-001', 'implementation');
|
|
308
|
+
expect(agentAny.memoryState.currentTask).toBeDefined();
|
|
309
|
+
expect(agentAny.memoryState.currentTask.storyId).toBe('STORY-001');
|
|
310
|
+
expect(agentAny.memoryState.currentTask.phase).toBe('implementation');
|
|
311
|
+
});
|
|
312
|
+
it('should update task progress', () => {
|
|
313
|
+
const agent = new TestAgent(context);
|
|
314
|
+
const agentAny = agent;
|
|
315
|
+
agentAny.setCurrentTask('STORY-001', 'implementation');
|
|
316
|
+
agentAny.updateTaskProgress('Modified file A', ['fileA.ts']);
|
|
317
|
+
expect(agentAny.memoryState.currentTask.lastAction).toBe('Modified file A');
|
|
318
|
+
expect(agentAny.memoryState.currentTask.filesModified).toContain('fileA.ts');
|
|
319
|
+
});
|
|
320
|
+
it('should accumulate modified files', () => {
|
|
321
|
+
const agent = new TestAgent(context);
|
|
322
|
+
const agentAny = agent;
|
|
323
|
+
agentAny.setCurrentTask('STORY-001', 'implementation');
|
|
324
|
+
agentAny.updateTaskProgress('Modified A', ['fileA.ts']);
|
|
325
|
+
agentAny.updateTaskProgress('Modified B', ['fileB.ts']);
|
|
326
|
+
expect(agentAny.memoryState.currentTask.filesModified).toContain('fileA.ts');
|
|
327
|
+
expect(agentAny.memoryState.currentTask.filesModified).toContain('fileB.ts');
|
|
328
|
+
});
|
|
329
|
+
});
|
|
330
|
+
describe('Error Handling', () => {
|
|
331
|
+
it('should handle LLM timeout errors', async () => {
|
|
332
|
+
provider.complete = vi.fn().mockRejectedValue(new Error('Timeout'));
|
|
333
|
+
const agent = new TestAgent(context);
|
|
334
|
+
const agentAny = agent;
|
|
335
|
+
await expect(agentAny.chat('Test')).rejects.toThrow('Timeout');
|
|
336
|
+
});
|
|
337
|
+
it('should log LLM errors', async () => {
|
|
338
|
+
provider.complete = vi.fn().mockRejectedValue(new Error('LLM Error'));
|
|
339
|
+
const agent = new TestAgent(context);
|
|
340
|
+
const agentAny = agent;
|
|
341
|
+
await expect(agentAny.chat('Test')).rejects.toThrow();
|
|
342
|
+
const events = queryAll(db, 'SELECT event_type FROM agent_logs WHERE agent_id = ?', [agentRow.id]);
|
|
343
|
+
expect(events.map(e => e.event_type)).toContain('AGENT_TERMINATED');
|
|
344
|
+
});
|
|
345
|
+
it('should pass through timeout option to LLM provider', async () => {
|
|
346
|
+
const completeSpy = vi.spyOn(provider, 'complete');
|
|
347
|
+
const agent = new TestAgent(context);
|
|
348
|
+
const agentAny = agent;
|
|
349
|
+
await agentAny.chat('Test');
|
|
350
|
+
expect(completeSpy).toHaveBeenCalledWith(expect.any(Array), { timeoutMs: 30000 });
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
describe('Heartbeat Mechanism', () => {
|
|
354
|
+
it('should send initial heartbeat on construction', () => {
|
|
355
|
+
// Create agent to trigger heartbeat
|
|
356
|
+
new TestAgent(context);
|
|
357
|
+
// Check that last_seen was updated
|
|
358
|
+
const result = queryOne(db, 'SELECT last_seen FROM agents WHERE id = ?', [agentRow.id]);
|
|
359
|
+
expect(result?.last_seen).toBeTruthy();
|
|
360
|
+
});
|
|
361
|
+
it('should stop heartbeat after agent completes', async () => {
|
|
362
|
+
const agent = new TestAgent(context);
|
|
363
|
+
await agent.run();
|
|
364
|
+
// Agent should complete without errors
|
|
365
|
+
expect(true).toBe(true);
|
|
366
|
+
});
|
|
367
|
+
it('should stop heartbeat after agent fails', async () => {
|
|
368
|
+
provider.complete = vi.fn().mockRejectedValue(new Error('Test error'));
|
|
369
|
+
const agent = new TestAgent(context);
|
|
370
|
+
await expect(agent.run()).rejects.toThrow();
|
|
371
|
+
// Agent should still clean up heartbeat
|
|
372
|
+
expect(true).toBe(true);
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
//# sourceMappingURL=base-agent.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-agent.test.js","sourceRoot":"","sources":["../../src/agents/base-agent.test.ts"],"names":[],"mappings":"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"}
|
package/dist/agents/senior.d.ts
CHANGED
|
@@ -10,7 +10,6 @@ export declare class SeniorAgent extends BaseAgent {
|
|
|
10
10
|
execute(): Promise<void>;
|
|
11
11
|
private analyzeCodebase;
|
|
12
12
|
private processStory;
|
|
13
|
-
private delegateStory;
|
|
14
13
|
private implementStory;
|
|
15
14
|
private reviewStory;
|
|
16
15
|
escalateToTechLead(reason: string): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"senior.d.ts","sourceRoot":"","sources":["../../src/agents/senior.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"senior.d.ts","sourceRoot":"","sources":["../../src/agents/senior.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,WAAY,SAAQ,SAAS;IACxC,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,eAAe,CAAkB;gBAE7B,OAAO,EAAE,aAAa;IAUlC,eAAe,IAAI,MAAM;IAuCnB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBhB,eAAe;YAwBf,YAAY;YAQZ,cAAc;YAyDd,WAAW;IA8CnB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAiBxD"}
|