@kjerneverk/execution-openai 1.0.5-dev.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/.kodrdriv-test-cache.json +6 -0
- package/LICENSE +18 -0
- package/README.md +80 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/output/kodrdriv/.kodrdriv-parallel-context.json +589 -0
- package/output/kodrdriv/260110-1751-release-notes.md +39 -0
- package/output/kodrdriv/260112-2207-commit-message.md +1 -0
- package/output/kodrdriv/260112-2208-release-notes.md +36 -0
- package/output/kodrdriv/260112-2341-commit-message.md +1 -0
- package/output/kodrdriv/260113-0029-commit-message.md +1 -0
- package/output/kodrdriv/260113-0030-release-notes.md +5 -0
- package/output/kodrdriv/260114-0656-commit-message.md +6 -0
- package/output/kodrdriv/260115-0616-commit-message.md +1 -0
- package/output/kodrdriv/260115-0739-commit-message.md +1 -0
- package/output/kodrdriv/260126-0852-commit-message.md +1 -0
- package/output/kodrdriv/260126-0853-release-notes.md +47 -0
- package/output/kodrdriv/260126-0854-release-notes.md +50 -0
- package/output/kodrdriv/260128-0929-commit-message.md +1 -0
- package/output/kodrdriv/260128-0929-release-notes.md +24 -0
- package/output/kodrdriv/260128-0959-commit-message.md +6 -0
- package/output/kodrdriv/260128-1127-commit-message.md +1 -0
- package/output/kodrdriv/260128-1127-release-notes.md +30 -0
- package/output/kodrdriv/260130-1639-commit-message.md +5 -0
- package/output/kodrdriv/260130-1652-commit-message.md +1 -0
- package/output/kodrdriv/260130-1652-release-notes.md +27 -0
- package/output/kodrdriv/RELEASE_NOTES.md +25 -0
- package/output/kodrdriv/RELEASE_TITLE.md +1 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-13T06-07-12-251Z.md +97 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-13T07-41-08-151Z.md +97 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-13T08-29-26-449Z.md +97 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-14T14-56-03-314Z.md +102 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-15T14-16-42-406Z.md +97 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-15T15-39-56-545Z.md +114 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-26T16-52-42-503Z.md +152 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-28T17-59-30-913Z.md +204 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-31T00-39-30-443Z.md +245 -0
- package/output/kodrdriv/agentic-reflection-commit-2026-01-31T00-52-07-165Z.md +152 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-11T01-51-19-115Z.md +277 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-13T06-08-15-507Z.md +289 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-13T08-30-05-728Z.md +312 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-26T16-53-34-128Z.md +417 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-26T16-53-55-634Z.md +391 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-26T16-54-13-700Z.md +456 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-26T16-54-22-655Z.md +496 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-26T16-54-32-261Z.md +490 -0
- package/output/kodrdriv/agentic-reflection-release-2026-01-31T00-52-29-053Z.md +334 -0
- package/package.json +58 -0
- package/package.json~ +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
chore: run build in precommit script
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
chore(release): bump @riotprompt/execution-openai to 1.0.0
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# 1.0.0 — Safer OpenAI execution (API key validation + secret-sanitized errors)
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Version **1.0.0** focuses on hardening the OpenAI provider against accidental secret leakage and misconfiguration by:
|
|
5
|
+
- validating OpenAI API keys before requests are made, and
|
|
6
|
+
- sanitizing provider errors so keys don’t leak via thrown error messages / stacks.
|
|
7
|
+
|
|
8
|
+
It also includes small build, tooling, and housekeeping updates.
|
|
9
|
+
|
|
10
|
+
## Security & safety improvements
|
|
11
|
+
### API key validation (fail fast)
|
|
12
|
+
`OpenAIProvider.execute()` now validates the API key format (from `options.apiKey` or `OPENAI_API_KEY`) before creating the OpenAI client:
|
|
13
|
+
- Missing key still throws an error.
|
|
14
|
+
- Invalid-looking keys now throw an explicit “Invalid OpenAI API key format” error instead of proceeding.
|
|
15
|
+
|
|
16
|
+
This helps catch bad configuration earlier and prevents sending malformed credentials downstream.
|
|
17
|
+
|
|
18
|
+
### Error sanitization to avoid secret leakage
|
|
19
|
+
Provider errors are now wrapped/sanitized using `@theunwalked/spotclean` (`createSafeError(...)`), with secret-guard configuration enabled. In practice:
|
|
20
|
+
- error messages are redacted (e.g., `sk-...` and `sk-proj-...` patterns),
|
|
21
|
+
- stack traces are sanitized in production, and
|
|
22
|
+
- errors can include correlation IDs (as configured).
|
|
23
|
+
|
|
24
|
+
In addition, OpenAI key patterns are registered with `@theunwalked/offrecord` on module load to support consistent redaction.
|
|
25
|
+
|
|
26
|
+
## Build and dependency updates
|
|
27
|
+
- Added runtime dependencies:
|
|
28
|
+
- `@theunwalked/offrecord`
|
|
29
|
+
- `@theunwalked/spotclean`
|
|
30
|
+
- Updated `vite.config.ts` to treat the new dependencies (and `node:crypto`) as externals for the library build. This keeps the output lean and avoids bundling these modules into the build artifact.
|
|
31
|
+
|
|
32
|
+
## Developer workflow changes
|
|
33
|
+
- `precommit` script now runs `build` in addition to lint/tests, catching build failures earlier in local workflows.
|
|
34
|
+
|
|
35
|
+
## Documentation & repo housekeeping
|
|
36
|
+
- `.gitignore` now ignores `.kodrdriv*` internal files.
|
|
37
|
+
- README includes a `<!-- v1.0.0 -->` marker update (no behavioral docs changes).
|
|
38
|
+
|
|
39
|
+
## Breaking changes / important behavior changes
|
|
40
|
+
No explicit breaking changes were detected automatically, but there are a couple of **behavioral changes to be aware of**:
|
|
41
|
+
- **Stricter API key validation**: code that previously passed a non-standard key string may now fail fast.
|
|
42
|
+
- **Sanitized/wrapped errors**: consumers that assert on exact error messages or rely on raw upstream error structures may need to adjust expectations, since errors are now sanitized for safety.
|
|
43
|
+
|
|
44
|
+
## Stats (main → HEAD)
|
|
45
|
+
- 6 commits
|
|
46
|
+
- 5 files changed: **116 insertions**, **50 deletions**
|
|
47
|
+
- Main functional changes are concentrated in `src/index.ts` and build configuration (`vite.config.ts`).
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# execution-openai 1.0.0
|
|
2
|
+
|
|
3
|
+
## Main story
|
|
4
|
+
|
|
5
|
+
This release hardens the OpenAI provider for production use by **validating API keys up front** and **sanitizing/redacting secrets from errors**. It also tightens up release hygiene (precommit build, ignored internal files) as part of the 1.0.0 cut.
|
|
6
|
+
|
|
7
|
+
## Security & reliability improvements
|
|
8
|
+
|
|
9
|
+
### API key validation (fail fast)
|
|
10
|
+
- `OpenAIProvider.execute()` now requires an API key from either:
|
|
11
|
+
- `options.apiKey`, or
|
|
12
|
+
- `OPENAI_API_KEY`
|
|
13
|
+
- Keys are validated against known OpenAI key formats (including `sk-...` and `sk-proj-...`). Invalid formats throw a clear error before any API call is made.
|
|
14
|
+
|
|
15
|
+
Impact:
|
|
16
|
+
- Misconfiguration is caught earlier and more consistently.
|
|
17
|
+
- If you previously passed non-standard key strings, they may now be rejected.
|
|
18
|
+
|
|
19
|
+
### Error sanitization / secret redaction
|
|
20
|
+
- The package now configures `@theunwalked/offrecord` and `@theunwalked/spotclean` on module load to:
|
|
21
|
+
- register OpenAI key patterns for redaction, and
|
|
22
|
+
- sanitize thrown errors via `createSafeError(...)` to reduce the chance of leaking secrets in logs.
|
|
23
|
+
|
|
24
|
+
Impact:
|
|
25
|
+
- Error messages and stack traces may look different than before (especially in production where stack sanitization is enabled).
|
|
26
|
+
- If you were matching exact error strings or depending on raw upstream SDK error output, update those assumptions.
|
|
27
|
+
|
|
28
|
+
## API surface and typings
|
|
29
|
+
|
|
30
|
+
- The package includes and exports “inline” versions of the core execution interfaces/types (`Provider`, `Request`, `Message`, `ExecutionOptions`, `ProviderResponse`) to avoid requiring the separate `execution` package at build time.
|
|
31
|
+
|
|
32
|
+
## Build / repo hygiene
|
|
33
|
+
|
|
34
|
+
- `precommit` now runs `build` in addition to lint/tests (`npm run build && npm run lint && npm run test`).
|
|
35
|
+
- `.gitignore` now ignores `.kodrdriv*` internal files.
|
|
36
|
+
- Vite/Rollup config continues to externalize runtime dependencies like `openai`, `tiktoken`, `@theunwalked/offrecord`, and `@theunwalked/spotclean`.
|
|
37
|
+
|
|
38
|
+
## Documentation
|
|
39
|
+
|
|
40
|
+
- README includes a release marker update for this version.
|
|
41
|
+
|
|
42
|
+
## Breaking changes
|
|
43
|
+
|
|
44
|
+
No explicit breaking changes were detected by automated scanning, but note these behavior changes that may affect consumers:
|
|
45
|
+
- **Invalid/empty API keys now error earlier** due to format validation.
|
|
46
|
+
- **Errors are now sanitized** (message/stack content may differ), which can break tests or log parsing that relied on previous error output.
|
|
47
|
+
|
|
48
|
+
## Known considerations
|
|
49
|
+
|
|
50
|
+
- `src/index.ts` exports `VERSION = '0.0.1'` even though the package version is 1.0.0. If you display or assert `VERSION`, be aware it does not currently reflect the published package version.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
fix: add new features and updates for the workflow and dependencies
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Version 1.0.1
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
The 1.0.1 release addresses several issues related to dependency management and improves the npm publishing workflow. This version simplifies some build processes and enhances stability by updating our package dependencies.
|
|
5
|
+
|
|
6
|
+
## Key Changes
|
|
7
|
+
- **Dependency Updates**: The version of core dependencies, notably `openai` and `tiktoken`, have been updated to ensure compatibility with the latest features and improvements.
|
|
8
|
+
- **NPM Publish Workflow**: The GitHub Actions configuration for npm publishing has been refined to streamline the release process.
|
|
9
|
+
- **Development Dependencies**: Several development dependencies have been updated to their latest versions, ensuring that our development environment is secure and up-to-date.
|
|
10
|
+
|
|
11
|
+
## Related Files
|
|
12
|
+
The following files were updated:
|
|
13
|
+
- **`package.json`**: Key changes include dependency updates and initial setup for the npm publishing workflow.
|
|
14
|
+
- **`.gitignore`**: Adjusted to ignore certain files and directories to keep the repository clean.
|
|
15
|
+
- **NPM Publish Workflow**: The GitHub Actions workflow for publishing npm packages has been enhanced.
|
|
16
|
+
|
|
17
|
+
## Impact on Users and Developers
|
|
18
|
+
- This release ensures that the package runs smoothly with the latest versions of its dependencies, reducing the likelihood of conflicts and bugs.
|
|
19
|
+
- Developers will benefit from a more streamlined workflow for package publishing, potentially leading to faster release cycles.
|
|
20
|
+
|
|
21
|
+
## Breaking Changes
|
|
22
|
+
No breaking changes were detected in this version, but a manual review of any API changes is recommended to ensure compatibility when integrating with existing systems.
|
|
23
|
+
|
|
24
|
+
With these updates, users and developers can expect a more stable and reliable experience with the package.
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
feat(openai): add model-aware provider and sanitize OpenAI secrets
|
|
2
|
+
|
|
3
|
+
- Implement OpenAIProvider with model selection via request/options and supportsModel checks
|
|
4
|
+
- Register OpenAI key patterns and validate API key format before client creation
|
|
5
|
+
- Sanitize/redact secrets in thrown errors using offrecord/spotclean
|
|
6
|
+
- Add offrecord/spotclean dependencies to package.json
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
No changes to commit; the specified file does not exist or has been deleted.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Version 1.0.3
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
This release introduces Version 1.0.3 of the OpenAI provider package, which implements a structure for executing commands through OpenAI's API. The primary focus of this release is to enhance error handling, confidentiality, and overall code robustness.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
- **Improvements in Error Handling**: The addition of error sanitization functionalities prevents sensitive information from being exposed in error messages. This includes the implementation of patterns to redact OpenAI API keys and project keys in error outputs.
|
|
8
|
+
|
|
9
|
+
- **Configuration Enhancements**: Various configurations for error sanitization and secret guarding have been improved. This includes enabling error sanitization based on the environment (production or development) and setting maximum message lengths to ensure secure logging.
|
|
10
|
+
|
|
11
|
+
- **Provider Interface Implementation**: The `OpenAIProvider` class which implements the `Provider` interface has been updated to enhance support for API requests and response handling, focusing on better error management and data handling.
|
|
12
|
+
|
|
13
|
+
## Impact on Users and Developers
|
|
14
|
+
- **Security Enhancements**: Users will benefit from improved security measures, with better handling of sensitive keys in both production and development environments.
|
|
15
|
+
|
|
16
|
+
- **Improved API Interaction**: Developers can expect a more robust interface for interacting with OpenAI's API, leading to fewer issues around API key management and improved error handling in responses.
|
|
17
|
+
|
|
18
|
+
- No files were found that directly import the updated files in this release, meaning existing integrations will continue to function without modification.
|
|
19
|
+
|
|
20
|
+
## Breaking Changes
|
|
21
|
+
- There are no breaking changes in this release. However, a manual review of the API changes is recommended to ensure compatibility with existing implementations.
|
|
22
|
+
|
|
23
|
+
## Summary of Changed Files
|
|
24
|
+
1. **src/index.ts**: Core implementation file, handling interactions with the OpenAI API.
|
|
25
|
+
2. **package.json**: Updated version number and dependencies related to the package.
|
|
26
|
+
|
|
27
|
+
## Related Tests
|
|
28
|
+
The file `src/index.ts` is associated with existing tests confirming the functionalities within the OpenAI provider implementation. Developers are encouraged to run these tests to ensure continued integration compatibility.
|
|
29
|
+
|
|
30
|
+
This release is aimed at maintaining security and enhancing the overall execution experience with OpenAI, making it crucial for both developers and implementers to update.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
feat(openai): inline execution types and harden secret/error sanitization
|
|
2
|
+
|
|
3
|
+
- Register/validate OpenAI key patterns and sanitize provider errors via offrecord/spotclean
|
|
4
|
+
- Vendor minimal `execution` types to keep build independent
|
|
5
|
+
- Update Vite library build externals and package deps to match new runtime requirements
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
chore: release 1.0.4
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# 1.0.4 — Inline execution types + stronger secret/error sanitization
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
This release focuses on making `@riotprompt/execution-openai` more self-contained (by inlining the `execution`-package types it needs) and safer to run in production by improving OpenAI API key redaction and error sanitization.
|
|
5
|
+
|
|
6
|
+
## Changes in 1.0.4
|
|
7
|
+
|
|
8
|
+
### Type portability / build independence
|
|
9
|
+
- **Inlined the core “execution” types** (`Model`, `Message`, `Request`, `ProviderResponse`, `ExecutionOptions`, `Provider`) directly into `src/index.ts`.
|
|
10
|
+
- Why it matters: consumers can use the exported types without relying on the `execution` package being available/published, reducing coupling and easing builds in environments where that dependency is not present.
|
|
11
|
+
|
|
12
|
+
### Security: harder-to-leak secrets and cleaner errors
|
|
13
|
+
- **Registered OpenAI API key patterns with `@utilarium/offrecord`** and added validation for key formats (including `sk-proj-...`).
|
|
14
|
+
- **Enabled and configured `@utilarium/spotclean` sanitization**:
|
|
15
|
+
- Sanitizes error messages (and, in production, stack traces) to reduce the chance of leaking secrets.
|
|
16
|
+
- Wraps thrown errors via `createSafeError(...)` so downstream logs/telemetry are less likely to contain API keys.
|
|
17
|
+
|
|
18
|
+
### Build configuration tweaks
|
|
19
|
+
- Updated `vite.config.ts` Rollup externals to ensure key runtime dependencies are treated as external during bundling (notably `openai`, `tiktoken`, `@utilarium/offrecord`, `@utilarium/spotclean`, and `node:crypto`).
|
|
20
|
+
|
|
21
|
+
## Impact for users / developers
|
|
22
|
+
- **Safer operational behavior**: if OpenAI errors include sensitive data, the provider now makes a best effort to redact/sanitize before rethrowing.
|
|
23
|
+
- **Easier consumption of types**: TypeScript users can import the provider-facing types directly from this package without waiting on another package publication.
|
|
24
|
+
|
|
25
|
+
## Breaking changes
|
|
26
|
+
- No breaking changes were detected in the `main..HEAD` range.
|
|
27
|
+
- Note: error messages may appear different due to sanitization/wrapping (this is typically beneficial, but could affect code/tests that assert on exact error strings).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
## Summary
|
|
2
|
+
This release focuses on making `@riotprompt/execution-openai` more self-contained (by inlining the `execution`-package types it needs) and safer to run in production by improving OpenAI API key redaction and error sanitization.
|
|
3
|
+
|
|
4
|
+
## Changes in 1.0.4
|
|
5
|
+
|
|
6
|
+
### Type portability / build independence
|
|
7
|
+
- **Inlined the core “execution” types** (`Model`, `Message`, `Request`, `ProviderResponse`, `ExecutionOptions`, `Provider`) directly into `src/index.ts`.
|
|
8
|
+
- Why it matters: consumers can use the exported types without relying on the `execution` package being available/published, reducing coupling and easing builds in environments where that dependency is not present.
|
|
9
|
+
|
|
10
|
+
### Security: harder-to-leak secrets and cleaner errors
|
|
11
|
+
- **Registered OpenAI API key patterns with `@utilarium/offrecord`** and added validation for key formats (including `sk-proj-...`).
|
|
12
|
+
- **Enabled and configured `@utilarium/spotclean` sanitization**:
|
|
13
|
+
- Sanitizes error messages (and, in production, stack traces) to reduce the chance of leaking secrets.
|
|
14
|
+
- Wraps thrown errors via `createSafeError(...)` so downstream logs/telemetry are less likely to contain API keys.
|
|
15
|
+
|
|
16
|
+
### Build configuration tweaks
|
|
17
|
+
- Updated `vite.config.ts` Rollup externals to ensure key runtime dependencies are treated as external during bundling (notably `openai`, `tiktoken`, `@utilarium/offrecord`, `@utilarium/spotclean`, and `node:crypto`).
|
|
18
|
+
|
|
19
|
+
## Impact for users / developers
|
|
20
|
+
- **Safer operational behavior**: if OpenAI errors include sensitive data, the provider now makes a best effort to redact/sanitize before rethrowing.
|
|
21
|
+
- **Easier consumption of types**: TypeScript users can import the provider-facing types directly from this package without waiting on another package publication.
|
|
22
|
+
|
|
23
|
+
## Breaking changes
|
|
24
|
+
- No breaking changes were detected in the `main..HEAD` range.
|
|
25
|
+
- Note: error messages may appear different due to sanitization/wrapping (this is typically beneficial, but could affect code/tests that assert on exact error strings).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
1.0.4 — Inline execution types + stronger secret/error sanitization
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Agentic Workflow - Self-Reflection Report
|
|
2
|
+
|
|
3
|
+
Generated: 2026-01-13T06:07:12.252Z
|
|
4
|
+
|
|
5
|
+
## Execution Summary
|
|
6
|
+
|
|
7
|
+
- **Iterations**: 2
|
|
8
|
+
- **Tool Calls**: 2
|
|
9
|
+
- **Unique Tools**: 2
|
|
10
|
+
|
|
11
|
+
## Tool Effectiveness Analysis
|
|
12
|
+
|
|
13
|
+
| Tool | Calls | Success | Failures | Success Rate | Avg Duration |
|
|
14
|
+
|------|-------|---------|----------|--------------|--------------|
|
|
15
|
+
| get_file_modification_times | 1 | 1 | 0 | 100.0% | 1ms |
|
|
16
|
+
| group_files_by_concern | 1 | 1 | 0 | 100.0% | 0ms |
|
|
17
|
+
|
|
18
|
+
### Tool Performance Insights
|
|
19
|
+
|
|
20
|
+
**Most Frequently Used:**
|
|
21
|
+
- get_file_modification_times: 1 calls
|
|
22
|
+
- group_files_by_concern: 1 calls
|
|
23
|
+
|
|
24
|
+
## Recommendations for Improvement
|
|
25
|
+
|
|
26
|
+
*No specific recommendations at this time. Execution appears optimal.*
|
|
27
|
+
|
|
28
|
+
## Detailed Execution Timeline
|
|
29
|
+
|
|
30
|
+
| Time | Iteration | Tool | Result | Duration |
|
|
31
|
+
|------|-----------|------|--------|----------|
|
|
32
|
+
| 10:07:10 PM | 1 | get_file_modification_times | ✅ Success | 1ms |
|
|
33
|
+
| 10:07:10 PM | 1 | group_files_by_concern | ✅ Success | 0ms |
|
|
34
|
+
|
|
35
|
+
## Conversation History
|
|
36
|
+
|
|
37
|
+
<details>
|
|
38
|
+
<summary>Click to expand full agentic interaction</summary>
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
"role": "system",
|
|
44
|
+
"content": "You are a professional software engineer writing commit messages for your team.\n\n## Available Tools\n\n### Understanding\n\n**get_file_history** _(cheap)_\nGet git commit history for one or more files to understand their evolution and past changes\n\nParameters:\n- `filePaths` (required): Array of file paths to get history for\n- `limit`: Maximum number of commits to return (default: 10)\n- `format`: Output format: \"summary\" for brief or \"detailed\" for full messages\n\n**When to use:** Get git commit history for one or more files to understand their evolution and past changes\n\n**Examples:**\n- Check if file has recent refactoring: `get_file_history({\"filePaths\":[\"src/auth.ts\"],\"limit\":5})`\n- Understand evolution of multiple related files: `get_file_history({\"filePaths\":[\"src/user.ts\",\"src/auth.ts\"],\"limit\":10,\"format\":\"detailed\"})`\n\n---\n\n**get_file_content** _(moderate)_\nGet the complete current content of a file to understand context around changes. Returns a message if the file does not exist (e.g., if it was deleted).\n\nParameters:\n- `filePath` (required): Path to the file\n- `includeLineNumbers`: Include line numbers in output (default: false)\n\n**When to use:** Get the complete current content of a file to understand context around changes. Returns a message if the file does not exist (e.g., if it was deleted).\n\n**Examples:**\n- See full class definition for modified method: `get_file_content({\"filePath\":\"src/services/auth.ts\",\"includeLineNumbers\":true})`\n- Check imports and structure: `get_file_content({\"filePath\":\"src/utils/helpers.ts\"})`\n\n---\n\n**get_related_tests** _(cheap)_\nFind test files related to production files to understand what the code is supposed to do\n\nParameters:\n- `filePaths` (required): Production file paths\n\n**When to use:** Find test files related to production files to understand what the code is supposed to do\n\n**Examples:**\n- Find tests for modified service: `get_related_tests({\"filePaths\":[\"src/services/auth.ts\"]})`\n\n---\n\n**analyze_diff_section** _(cheap)_\nGet expanded context around specific lines in a file to better understand changes\n\nParameters:\n- `filePath` (required): File containing the section to analyze\n- `startLine` (required): Starting line number\n- `endLine` (required): Ending line number\n- `contextLines`: Number of additional context lines to show before and after (default: 10)\n\n**When to use:** Get expanded context around specific lines in a file to better understand changes\n\n**Examples:**\n- See context around confusing change: `analyze_diff_section({\"filePath\":\"src/auth.ts\",\"startLine\":45,\"endLine\":52,\"contextLines\":15})`\n\n---\n\n**get_recent_commits** _(cheap)_\nGet recent commits that modified the same files to understand recent work in this area\n\nParameters:\n- `filePaths` (required): Files to check for recent commits\n- `since`: Time period to look back (e.g., \"1 week ago\", \"2 days ago\")\n- `limit`: Maximum number of commits to return (default: 5)\n\n**When to use:** Get recent commits that modified the same files to understand recent work in this area\n\n**Examples:**\n- Check for duplicate commit messages: `get_recent_commits({\"filePaths\":[\"src/auth.ts\"],\"since\":\"1 week ago\",\"limit\":5})`\n\n---\n\n### Analysis\n\n**search_codebase** _(moderate)_\nSearch for code patterns, function names, or text across the codebase using git grep\n\nParameters:\n- `query` (required): Search pattern (can be plain text or regex)\n- `fileTypes`: Limit search to specific file extensions (e.g., [\"ts\", \"js\"])\n- `contextLines`: Number of context lines to show around matches (default: 2)\n\n**When to use:** Search for code patterns, function names, or text across the codebase using git grep\n\n**Examples:**\n- Find all uses of a renamed function: `search_codebase({\"query\":\"oldFunctionName\",\"fileTypes\":[\"ts\",\"tsx\"]})`\n- Check if pattern exists elsewhere: `search_codebase({\"query\":\"pattern.*string\",\"contextLines\":3})`\n\n---\n\n**get_file_dependencies** _(moderate)_\nFind which files import or depend on the changed files to assess change impact\n\nParameters:\n- `filePaths` (required): Files to analyze dependencies for\n\n**When to use:** Find which files import or depend on the changed files to assess change impact\n\n**Examples:**\n- Check impact of util function change: `get_file_dependencies({\"filePaths\":[\"src/utils/format.ts\"]})`\n\n---\n\n### Organization\n\n**group_files_by_concern** _(cheap)_\nAnalyze changed files and suggest logical groupings that might represent separate commits\n\nParameters:\n- `filePaths` (required): All changed files to analyze\n\n**When to use:** Analyze changed files and suggest logical groupings that might represent separate commits\n\n**Examples:**\n- Check if multiple unrelated changes should be split: `group_files_by_concern({\"filePaths\":[\"src/auth.ts\",\"README.md\",\"tests/auth.test.ts\",\"package.json\"]})`\n\n---\n\n**get_file_modification_times** _(cheap)_\nGet modification timestamps for changed files. Temporal proximity is one signal (among others) that can help identify related changes. Files modified close together MAY be part of the same logical change, but this is not guaranteed - always cross-reference with logical groupings.\n\nParameters:\n- `filePaths` (required): All changed files to analyze\n\n**When to use:** Get modification timestamps for changed files. Temporal proximity is one signal (among others) that can help identify related changes. Files modified close together MAY be part of the same logical change, but this is not guaranteed - always cross-reference with logical groupings.\n\n**Examples:**\n- Identify files modified together vs at different times: `get_file_modification_times({\"filePaths\":[\"src/auth.ts\",\"src/user.ts\",\"README.md\",\"tests/auth.test.ts\"]})`\n\n---\n\n\n\n## Your Task\n\nAnalyze the staged changes and determine the best way to commit them. Your primary goal is to create **meaningful, atomic commits** that each represent a single logical change.\n\n**CRITICAL**: When there are many changed files, especially after a long work session (multiple hours), you should almost always split them into multiple commits. A single commit with 10+ files usually indicates multiple distinct changes that should be separated.\n\nThink about:\n- What distinct features, fixes, or improvements are represented?\n- Are there natural groupings by functionality, module, or purpose?\n- When were files modified relative to each other?\n- What should reviewers focus on in each commit?\n\n## Investigation Strategy\n\nFor any non-trivial set of changes, gather multiple signals to understand how to group commits:\n\n1. **Check file modification times** using `get_file_modification_times`\n - This reveals *when* files were changed relative to each other\n - Files modified close together *may* be part of the same logical change\n - Large temporal gaps *can* indicate separate work sessions\n - Note: temporal proximity is one signal, not a guarantee of relatedness\n\n2. **Understand logical relationships** using `group_files_by_concern`\n - Groups by module, type (tests, docs, source), and directory structure\n - Reveals which files are functionally related regardless of when they were modified\n\n3. **Cross-reference both signals** to make informed decisions:\n - Files modified together AND logically related → strong candidate for same commit\n - Files modified apart BUT logically related → might still belong together\n - Files modified together BUT logically unrelated → consider splitting\n - Use your judgment - neither signal is definitive on its own\n\n4. **Investigate further** as needed:\n - get_file_content - see full context when diffs are unclear\n - get_file_history - understand how code evolved\n - get_file_dependencies - assess impact of changes\n - get_recent_commits - avoid duplicate messages\n - get_related_tests - understand behavior changes\n - search_codebase - find usage patterns\n\n## When to Split Commits\n\n**Prefer multiple commits when:**\n- Changes span multiple hours of work (check modification times!)\n- Different logical features or fixes are included\n- Test changes could be separated from production code changes\n- Documentation updates are unrelated to code changes\n- Refactoring is mixed with feature work\n- Configuration changes are mixed with implementation changes\n- Files in different modules/packages are changed for different reasons\n\n**Keep as one commit when:**\n- All changes are part of a single, cohesive feature\n- Files were modified together in a focused work session\n- Test changes directly test the production code changes\n- The changes tell a single coherent story\n\n**Default bias**: When in doubt about whether to split, **prefer splitting**. It's better to have too many focused commits than too few bloated ones. A good commit should be understandable and reviewable in isolation.\n\n## Important Context Guidelines\n\nIf additional context is provided (from context files or other sources), use your judgment:\n- If the context is relevant to these specific changes, incorporate it\n- If the context describes unrelated changes or other packages, ignore it\n- Don't force connections between unrelated information\n- Focus on accurately describing what actually changed\n\n## Writing Style\n\nWrite naturally and directly:\n- Use plain language, not corporate speak\n- Be specific and concrete\n- Avoid buzzwords and jargon\n- No emojis or excessive punctuation\n- No phrases like \"this commit\" or \"this PR\"\n- No meta-commentary about the commit itself\n\nFollow conventional commit format when appropriate (feat:, fix:, refactor:, docs:, test:, chore:), but prioritize clarity over formality.\n\n## Output Format\n\nWhen ready, format your response as:\n\nCOMMIT_MESSAGE:\n[Your commit message here - only for the FIRST group of changes if splitting]\n\nIf changes should be split into multiple commits (which is often the case with large changesets):\n\nSUGGESTED_SPLITS:\nSplit 1:\nFiles: [list of files]\nRationale: [why these belong together - mention temporal clustering and/or logical relationship]\nMessage: [commit message for this split]\n\nSplit 2:\nFiles: [list of files]\nRationale: [why these belong together]\nMessage: [commit message for this split]\n\nSplit 3:\n...\n\nOutput only the commit message and splits. No conversational remarks or follow-up offers."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"role": "user",
|
|
48
|
+
"content": "I have staged changes that need a commit message.\n\nChanged files (1):\n - package.json\n\nDiff:\ndiff --git a/package.json b/package.json\nindex 6c71a17..fb11a9c 100644\n--- a/package.json\n+++ b/package.json\n@@ -1,6 +1,6 @@\n {\n \"name\": \"@riotprompt/execution-openai\",\n- \"version\": \"0.0.3-dev.0\",\n+ \"version\": \"0.0.3\",\n \"description\": \"OpenAI provider for execution - implements Provider interface\",\n \"type\": \"module\",\n \"main\": \"./dist/index.cjs\",\n\n\nRecent commit history for context:\ncommit e2939df35c923fac72f6881065e48ebdb23d2a91\nAuthor: Tim O'Brien <tobrien@walmart.com>\nDate: Mon Jan 12 17:05:00 2026 -0800\n\n ci: bump GitHub Actions Node to 24 and use npm install\n\ncommit 5c3dba10534acf210f66a03437ada713390646ac\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Sat Jan 10 17:54:34 2026 -0800\n\n 0.0.3-dev.0\n\ncommit 198e9ed7b691d41d9475cdd6372ffa0e4b257d75\nMerge: 43f7d70 d3ddebd\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Sat Jan 10 17:54:32 2026 -0800\n\n Merge main into working for sync\n\n\n## Your Analysis Task\n\nGather signals to understand the changes:\n1. Use `get_file_modification_times` to see when files were modified relative to each other\n2. Use `group_files_by_concern` to understand how files relate by type/purpose\n3. Cross-reference both signals - temporal proximity and logical relatedness - to determine the best commit structure\n\nConsider:\n- What distinct features, fixes, or improvements are included?\n- Are files that were modified together also logically related?\n- Would separate commits make the history more understandable?\n\nIf changes represent multiple logical concerns, suggest splits.\n\nIf context information is provided, use it only if relevant to these specific changes.\nDon't force connections that don't exist - focus on what actually changed."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"role": "assistant",
|
|
52
|
+
"content": null,
|
|
53
|
+
"tool_calls": [
|
|
54
|
+
{
|
|
55
|
+
"id": "call_oiIRm7CwbX51gGPQCoqTsWCb",
|
|
56
|
+
"type": "function",
|
|
57
|
+
"function": {
|
|
58
|
+
"name": "get_file_modification_times",
|
|
59
|
+
"arguments": "{\"filePaths\": [\"package.json\"]}"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "call_QrBTplLGHpwhT3SP1CHg1oQJ",
|
|
64
|
+
"type": "function",
|
|
65
|
+
"function": {
|
|
66
|
+
"name": "group_files_by_concern",
|
|
67
|
+
"arguments": "{\"filePaths\": [\"package.json\"]}"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"role": "tool",
|
|
74
|
+
"tool_call_id": "call_oiIRm7CwbX51gGPQCoqTsWCb",
|
|
75
|
+
"content": "## File Modification Times (sorted oldest to newest)\n\n2026-01-13 06:07:09 package.json\n\n\n## Temporal Clusters (files modified within 10 minutes of each other)\n\nAll 1 files were modified in a single work session.\n",
|
|
76
|
+
"name": "get_file_modification_times"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"role": "tool",
|
|
80
|
+
"tool_call_id": "call_QrBTplLGHpwhT3SP1CHg1oQJ",
|
|
81
|
+
"content": "dependencies (1 files):\n - package.json\n\nSuggestion: All files appear to be related and should be in a single commit.",
|
|
82
|
+
"name": "group_files_by_concern"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"role": "assistant",
|
|
86
|
+
"content": "COMMIT_MESSAGE:\nchore(release): bump @riotprompt/execution-openai to 0.0.3"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
</details>
|
|
92
|
+
|
|
93
|
+
## Generated Commit Message
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
chore(release): bump @riotprompt/execution-openai to 0.0.3
|
|
97
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Agentic Workflow - Self-Reflection Report
|
|
2
|
+
|
|
3
|
+
Generated: 2026-01-13T07:41:08.151Z
|
|
4
|
+
|
|
5
|
+
## Execution Summary
|
|
6
|
+
|
|
7
|
+
- **Iterations**: 2
|
|
8
|
+
- **Tool Calls**: 2
|
|
9
|
+
- **Unique Tools**: 2
|
|
10
|
+
|
|
11
|
+
## Tool Effectiveness Analysis
|
|
12
|
+
|
|
13
|
+
| Tool | Calls | Success | Failures | Success Rate | Avg Duration |
|
|
14
|
+
|------|-------|---------|----------|--------------|--------------|
|
|
15
|
+
| get_file_modification_times | 1 | 1 | 0 | 100.0% | 1ms |
|
|
16
|
+
| group_files_by_concern | 1 | 1 | 0 | 100.0% | 0ms |
|
|
17
|
+
|
|
18
|
+
### Tool Performance Insights
|
|
19
|
+
|
|
20
|
+
**Most Frequently Used:**
|
|
21
|
+
- get_file_modification_times: 1 calls
|
|
22
|
+
- group_files_by_concern: 1 calls
|
|
23
|
+
|
|
24
|
+
## Recommendations for Improvement
|
|
25
|
+
|
|
26
|
+
*No specific recommendations at this time. Execution appears optimal.*
|
|
27
|
+
|
|
28
|
+
## Detailed Execution Timeline
|
|
29
|
+
|
|
30
|
+
| Time | Iteration | Tool | Result | Duration |
|
|
31
|
+
|------|-----------|------|--------|----------|
|
|
32
|
+
| 11:41:02 PM | 1 | get_file_modification_times | ✅ Success | 1ms |
|
|
33
|
+
| 11:41:02 PM | 1 | group_files_by_concern | ✅ Success | 0ms |
|
|
34
|
+
|
|
35
|
+
## Conversation History
|
|
36
|
+
|
|
37
|
+
<details>
|
|
38
|
+
<summary>Click to expand full agentic interaction</summary>
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
"role": "system",
|
|
44
|
+
"content": "You are a professional software engineer writing commit messages for your team.\n\n## Available Tools\n\n### Understanding\n\n**get_file_history** _(cheap)_\nGet git commit history for one or more files to understand their evolution and past changes\n\nParameters:\n- `filePaths` (required): Array of file paths to get history for\n- `limit`: Maximum number of commits to return (default: 10)\n- `format`: Output format: \"summary\" for brief or \"detailed\" for full messages\n\n**When to use:** Get git commit history for one or more files to understand their evolution and past changes\n\n**Examples:**\n- Check if file has recent refactoring: `get_file_history({\"filePaths\":[\"src/auth.ts\"],\"limit\":5})`\n- Understand evolution of multiple related files: `get_file_history({\"filePaths\":[\"src/user.ts\",\"src/auth.ts\"],\"limit\":10,\"format\":\"detailed\"})`\n\n---\n\n**get_file_content** _(moderate)_\nGet the complete current content of a file to understand context around changes. Returns a message if the file does not exist (e.g., if it was deleted).\n\nParameters:\n- `filePath` (required): Path to the file\n- `includeLineNumbers`: Include line numbers in output (default: false)\n\n**When to use:** Get the complete current content of a file to understand context around changes. Returns a message if the file does not exist (e.g., if it was deleted).\n\n**Examples:**\n- See full class definition for modified method: `get_file_content({\"filePath\":\"src/services/auth.ts\",\"includeLineNumbers\":true})`\n- Check imports and structure: `get_file_content({\"filePath\":\"src/utils/helpers.ts\"})`\n\n---\n\n**get_related_tests** _(cheap)_\nFind test files related to production files to understand what the code is supposed to do\n\nParameters:\n- `filePaths` (required): Production file paths\n\n**When to use:** Find test files related to production files to understand what the code is supposed to do\n\n**Examples:**\n- Find tests for modified service: `get_related_tests({\"filePaths\":[\"src/services/auth.ts\"]})`\n\n---\n\n**analyze_diff_section** _(cheap)_\nGet expanded context around specific lines in a file to better understand changes\n\nParameters:\n- `filePath` (required): File containing the section to analyze\n- `startLine` (required): Starting line number\n- `endLine` (required): Ending line number\n- `contextLines`: Number of additional context lines to show before and after (default: 10)\n\n**When to use:** Get expanded context around specific lines in a file to better understand changes\n\n**Examples:**\n- See context around confusing change: `analyze_diff_section({\"filePath\":\"src/auth.ts\",\"startLine\":45,\"endLine\":52,\"contextLines\":15})`\n\n---\n\n**get_recent_commits** _(cheap)_\nGet recent commits that modified the same files to understand recent work in this area\n\nParameters:\n- `filePaths` (required): Files to check for recent commits\n- `since`: Time period to look back (e.g., \"1 week ago\", \"2 days ago\")\n- `limit`: Maximum number of commits to return (default: 5)\n\n**When to use:** Get recent commits that modified the same files to understand recent work in this area\n\n**Examples:**\n- Check for duplicate commit messages: `get_recent_commits({\"filePaths\":[\"src/auth.ts\"],\"since\":\"1 week ago\",\"limit\":5})`\n\n---\n\n### Analysis\n\n**search_codebase** _(moderate)_\nSearch for code patterns, function names, or text across the codebase using git grep\n\nParameters:\n- `query` (required): Search pattern (can be plain text or regex)\n- `fileTypes`: Limit search to specific file extensions (e.g., [\"ts\", \"js\"])\n- `contextLines`: Number of context lines to show around matches (default: 2)\n\n**When to use:** Search for code patterns, function names, or text across the codebase using git grep\n\n**Examples:**\n- Find all uses of a renamed function: `search_codebase({\"query\":\"oldFunctionName\",\"fileTypes\":[\"ts\",\"tsx\"]})`\n- Check if pattern exists elsewhere: `search_codebase({\"query\":\"pattern.*string\",\"contextLines\":3})`\n\n---\n\n**get_file_dependencies** _(moderate)_\nFind which files import or depend on the changed files to assess change impact\n\nParameters:\n- `filePaths` (required): Files to analyze dependencies for\n\n**When to use:** Find which files import or depend on the changed files to assess change impact\n\n**Examples:**\n- Check impact of util function change: `get_file_dependencies({\"filePaths\":[\"src/utils/format.ts\"]})`\n\n---\n\n### Organization\n\n**group_files_by_concern** _(cheap)_\nAnalyze changed files and suggest logical groupings that might represent separate commits\n\nParameters:\n- `filePaths` (required): All changed files to analyze\n\n**When to use:** Analyze changed files and suggest logical groupings that might represent separate commits\n\n**Examples:**\n- Check if multiple unrelated changes should be split: `group_files_by_concern({\"filePaths\":[\"src/auth.ts\",\"README.md\",\"tests/auth.test.ts\",\"package.json\"]})`\n\n---\n\n**get_file_modification_times** _(cheap)_\nGet modification timestamps for changed files. Temporal proximity is one signal (among others) that can help identify related changes. Files modified close together MAY be part of the same logical change, but this is not guaranteed - always cross-reference with logical groupings.\n\nParameters:\n- `filePaths` (required): All changed files to analyze\n\n**When to use:** Get modification timestamps for changed files. Temporal proximity is one signal (among others) that can help identify related changes. Files modified close together MAY be part of the same logical change, but this is not guaranteed - always cross-reference with logical groupings.\n\n**Examples:**\n- Identify files modified together vs at different times: `get_file_modification_times({\"filePaths\":[\"src/auth.ts\",\"src/user.ts\",\"README.md\",\"tests/auth.test.ts\"]})`\n\n---\n\n\n\n## Your Task\n\nAnalyze the staged changes and determine the best way to commit them. Your primary goal is to create **meaningful, atomic commits** that each represent a single logical change.\n\n**CRITICAL**: When there are many changed files, especially after a long work session (multiple hours), you should almost always split them into multiple commits. A single commit with 10+ files usually indicates multiple distinct changes that should be separated.\n\nThink about:\n- What distinct features, fixes, or improvements are represented?\n- Are there natural groupings by functionality, module, or purpose?\n- When were files modified relative to each other?\n- What should reviewers focus on in each commit?\n\n## Investigation Strategy\n\nFor any non-trivial set of changes, gather multiple signals to understand how to group commits:\n\n1. **Check file modification times** using `get_file_modification_times`\n - This reveals *when* files were changed relative to each other\n - Files modified close together *may* be part of the same logical change\n - Large temporal gaps *can* indicate separate work sessions\n - Note: temporal proximity is one signal, not a guarantee of relatedness\n\n2. **Understand logical relationships** using `group_files_by_concern`\n - Groups by module, type (tests, docs, source), and directory structure\n - Reveals which files are functionally related regardless of when they were modified\n\n3. **Cross-reference both signals** to make informed decisions:\n - Files modified together AND logically related → strong candidate for same commit\n - Files modified apart BUT logically related → might still belong together\n - Files modified together BUT logically unrelated → consider splitting\n - Use your judgment - neither signal is definitive on its own\n\n4. **Investigate further** as needed:\n - get_file_content - see full context when diffs are unclear\n - get_file_history - understand how code evolved\n - get_file_dependencies - assess impact of changes\n - get_recent_commits - avoid duplicate messages\n - get_related_tests - understand behavior changes\n - search_codebase - find usage patterns\n\n## When to Split Commits\n\n**Prefer multiple commits when:**\n- Changes span multiple hours of work (check modification times!)\n- Different logical features or fixes are included\n- Test changes could be separated from production code changes\n- Documentation updates are unrelated to code changes\n- Refactoring is mixed with feature work\n- Configuration changes are mixed with implementation changes\n- Files in different modules/packages are changed for different reasons\n\n**Keep as one commit when:**\n- All changes are part of a single, cohesive feature\n- Files were modified together in a focused work session\n- Test changes directly test the production code changes\n- The changes tell a single coherent story\n\n**Default bias**: When in doubt about whether to split, **prefer splitting**. It's better to have too many focused commits than too few bloated ones. A good commit should be understandable and reviewable in isolation.\n\n## Important Context Guidelines\n\nIf additional context is provided (from context files or other sources), use your judgment:\n- If the context is relevant to these specific changes, incorporate it\n- If the context describes unrelated changes or other packages, ignore it\n- Don't force connections between unrelated information\n- Focus on accurately describing what actually changed\n\n## Writing Style\n\nWrite naturally and directly:\n- Use plain language, not corporate speak\n- Be specific and concrete\n- Avoid buzzwords and jargon\n- No emojis or excessive punctuation\n- No phrases like \"this commit\" or \"this PR\"\n- No meta-commentary about the commit itself\n\nFollow conventional commit format when appropriate (feat:, fix:, refactor:, docs:, test:, chore:), but prioritize clarity over formality.\n\n## Output Format\n\nWhen ready, format your response as:\n\nCOMMIT_MESSAGE:\n[Your commit message here - only for the FIRST group of changes if splitting]\n\nIf changes should be split into multiple commits (which is often the case with large changesets):\n\nSUGGESTED_SPLITS:\nSplit 1:\nFiles: [list of files]\nRationale: [why these belong together - mention temporal clustering and/or logical relationship]\nMessage: [commit message for this split]\n\nSplit 2:\nFiles: [list of files]\nRationale: [why these belong together]\nMessage: [commit message for this split]\n\nSplit 3:\n...\n\nOutput only the commit message and splits. No conversational remarks or follow-up offers."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"role": "user",
|
|
48
|
+
"content": "I have staged changes that need a commit message.\n\nChanged files (3):\n - package.json\n - tsconfig.json\n - vite.config.ts\n\nDiff:\ndiff --git a/package.json b/package.json\nindex 1ef5e1f..04d3fbc 100644\n--- a/package.json\n+++ b/package.json\n@@ -3,16 +3,17 @@\n \"version\": \"0.0.4-dev.0\",\n \"description\": \"OpenAI provider for execution - implements Provider interface\",\n \"type\": \"module\",\n- \"main\": \"./dist/index.cjs\",\n- \"module\": \"./dist/index.js\",\n+ \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n- \"import\": \"./dist/index.js\",\n- \"require\": \"./dist/index.cjs\"\n+ \"import\": \"./dist/index.js\"\n }\n },\n+ \"engines\": {\n+ \"node\": \">=24.0.0\"\n+ },\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"vite build\",\ndiff --git a/tsconfig.json b/tsconfig.json\nindex 50dd1ef..85ef4cf 100644\n--- a/tsconfig.json\n+++ b/tsconfig.json\n@@ -1,7 +1,7 @@\n {\n \"compilerOptions\": {\n- \"target\": \"ES2022\",\n- \"lib\": [\"ES2022\"],\n+ \"target\": \"ES2024\",\n+ \"lib\": [\"ES2024\"],\n \"module\": \"ESNext\",\n \"moduleResolution\": \"bundler\",\n \"strict\": true,\n@@ -18,4 +18,3 @@\n \"include\": [\"src/**/*\"],\n \"exclude\": [\"node_modules\", \"dist\", \"tests\"]\n }\n-\ndiff --git a/vite.config.ts b/vite.config.ts\nindex 92587c6..4928eab 100644\n--- a/vite.config.ts\n+++ b/vite.config.ts\n@@ -1,14 +1,13 @@\n import { defineConfig } from \"vite\";\n import dts from \"vite-plugin-dts\";\n-import { resolve } from \"path\";\n \n export default defineConfig({\n build: {\n lib: {\n- entry: resolve(__dirname, \"src/index.ts\"),\n+ entry: \"src/index.ts\",\n name: \"execution-openai\",\n- fileName: (format) => (format === \"es\" ? \"index.js\" : \"index.cjs\"),\n- formats: [\"es\", \"cjs\"],\n+ fileName: () => \"index.js\",\n+ formats: [\"es\"],\n },\n rollupOptions: {\n external: [\"openai\", \"tiktoken\", \"execution\"],\n@@ -18,4 +17,3 @@ export default defineConfig({\n },\n plugins: [dts({ rollupTypes: true })],\n });\n-\n\n\nUser direction: --model\n\nRecent commit history for context:\ncommit 3d4aa2f5468b4a79dd498c0ba88fd93397b53160\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Mon Jan 12 22:10:33 2026 -0800\n\n chore: bump to v0.0.4-dev.0\n\ncommit 77c696fc4b15e11624eef8b36a695ec6fd5ebac1\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Mon Jan 12 22:09:39 2026 -0800\n\n chore(release): bump @riotprompt/execution-openai to 0.0.3 (#6)\n \n * 0.0.2-dev.0\n \n * Updated and separated tests\n \n * 0.0.3-dev.0\n \n * ci: bump GitHub Actions Node to 24 and use npm install\n \n * chore(release): bump @riotprompt/execution-openai to 0.0.3\n\ncommit d3ddebdaed42578185cf6a9717896e0dcc2fa2f5\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Sat Jan 10 17:51:23 2026 -0800\n\n Updated and separated tests (#5)\n \n * 0.0.2-dev.0\n \n * Updated and separated tests\n\n\n## Your Analysis Task\n\nGather signals to understand the changes:\n1. Use `get_file_modification_times` to see when files were modified relative to each other\n2. Use `group_files_by_concern` to understand how files relate by type/purpose\n3. Cross-reference both signals - temporal proximity and logical relatedness - to determine the best commit structure\n\nConsider:\n- What distinct features, fixes, or improvements are included?\n- Are files that were modified together also logically related?\n- Would separate commits make the history more understandable?\n\nIf changes represent multiple logical concerns, suggest splits.\n\nIf context information is provided, use it only if relevant to these specific changes.\nDon't force connections that don't exist - focus on what actually changed."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"role": "assistant",
|
|
52
|
+
"content": null,
|
|
53
|
+
"tool_calls": [
|
|
54
|
+
{
|
|
55
|
+
"id": "call_di2jXJxXfpVAZLHypwsiNeMT",
|
|
56
|
+
"type": "function",
|
|
57
|
+
"function": {
|
|
58
|
+
"name": "get_file_modification_times",
|
|
59
|
+
"arguments": "{\"filePaths\": [\"package.json\", \"tsconfig.json\", \"vite.config.ts\"]}"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "call_7wHUyfqnCeak3i7YsYQwvqfw",
|
|
64
|
+
"type": "function",
|
|
65
|
+
"function": {
|
|
66
|
+
"name": "group_files_by_concern",
|
|
67
|
+
"arguments": "{\"filePaths\": [\"package.json\", \"tsconfig.json\", \"vite.config.ts\"]}"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"role": "tool",
|
|
74
|
+
"tool_call_id": "call_di2jXJxXfpVAZLHypwsiNeMT",
|
|
75
|
+
"content": "## File Modification Times (sorted oldest to newest)\n\n2026-01-13 07:16:51 vite.config.ts\n2026-01-13 07:16:51 package.json\n2026-01-13 07:16:51 tsconfig.json\n\n\n## Temporal Clusters (files modified within 10 minutes of each other)\n\nAll 3 files were modified in a single work session.\n",
|
|
76
|
+
"name": "get_file_modification_times"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"role": "tool",
|
|
80
|
+
"tool_call_id": "call_7wHUyfqnCeak3i7YsYQwvqfw",
|
|
81
|
+
"content": "dependencies (1 files):\n - package.json\n\nother (2 files):\n - tsconfig.json\n - vite.config.ts\n\nSuggestion: These 2 groups might be better as separate commits if they represent different concerns.",
|
|
82
|
+
"name": "group_files_by_concern"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"role": "assistant",
|
|
86
|
+
"content": "COMMIT_MESSAGE:\nchore(build): switch to ESM-only output, require Node 24, and target ES2024"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
</details>
|
|
92
|
+
|
|
93
|
+
## Generated Commit Message
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
chore(build): switch to ESM-only output, require Node 24, and target ES2024
|
|
97
|
+
```
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
# Agentic Workflow - Self-Reflection Report
|
|
2
|
+
|
|
3
|
+
Generated: 2026-01-13T08:29:26.449Z
|
|
4
|
+
|
|
5
|
+
## Execution Summary
|
|
6
|
+
|
|
7
|
+
- **Iterations**: 2
|
|
8
|
+
- **Tool Calls**: 2
|
|
9
|
+
- **Unique Tools**: 2
|
|
10
|
+
|
|
11
|
+
## Tool Effectiveness Analysis
|
|
12
|
+
|
|
13
|
+
| Tool | Calls | Success | Failures | Success Rate | Avg Duration |
|
|
14
|
+
|------|-------|---------|----------|--------------|--------------|
|
|
15
|
+
| get_file_modification_times | 1 | 1 | 0 | 100.0% | 1ms |
|
|
16
|
+
| group_files_by_concern | 1 | 1 | 0 | 100.0% | 0ms |
|
|
17
|
+
|
|
18
|
+
### Tool Performance Insights
|
|
19
|
+
|
|
20
|
+
**Most Frequently Used:**
|
|
21
|
+
- get_file_modification_times: 1 calls
|
|
22
|
+
- group_files_by_concern: 1 calls
|
|
23
|
+
|
|
24
|
+
## Recommendations for Improvement
|
|
25
|
+
|
|
26
|
+
*No specific recommendations at this time. Execution appears optimal.*
|
|
27
|
+
|
|
28
|
+
## Detailed Execution Timeline
|
|
29
|
+
|
|
30
|
+
| Time | Iteration | Tool | Result | Duration |
|
|
31
|
+
|------|-----------|------|--------|----------|
|
|
32
|
+
| 12:29:25 AM | 1 | get_file_modification_times | ✅ Success | 1ms |
|
|
33
|
+
| 12:29:25 AM | 1 | group_files_by_concern | ✅ Success | 0ms |
|
|
34
|
+
|
|
35
|
+
## Conversation History
|
|
36
|
+
|
|
37
|
+
<details>
|
|
38
|
+
<summary>Click to expand full agentic interaction</summary>
|
|
39
|
+
|
|
40
|
+
```json
|
|
41
|
+
[
|
|
42
|
+
{
|
|
43
|
+
"role": "system",
|
|
44
|
+
"content": "You are a professional software engineer writing commit messages for your team.\n\n## Available Tools\n\n### Understanding\n\n**get_file_history** _(cheap)_\nGet git commit history for one or more files to understand their evolution and past changes\n\nParameters:\n- `filePaths` (required): Array of file paths to get history for\n- `limit`: Maximum number of commits to return (default: 10)\n- `format`: Output format: \"summary\" for brief or \"detailed\" for full messages\n\n**When to use:** Get git commit history for one or more files to understand their evolution and past changes\n\n**Examples:**\n- Check if file has recent refactoring: `get_file_history({\"filePaths\":[\"src/auth.ts\"],\"limit\":5})`\n- Understand evolution of multiple related files: `get_file_history({\"filePaths\":[\"src/user.ts\",\"src/auth.ts\"],\"limit\":10,\"format\":\"detailed\"})`\n\n---\n\n**get_file_content** _(moderate)_\nGet the complete current content of a file to understand context around changes. Returns a message if the file does not exist (e.g., if it was deleted).\n\nParameters:\n- `filePath` (required): Path to the file\n- `includeLineNumbers`: Include line numbers in output (default: false)\n\n**When to use:** Get the complete current content of a file to understand context around changes. Returns a message if the file does not exist (e.g., if it was deleted).\n\n**Examples:**\n- See full class definition for modified method: `get_file_content({\"filePath\":\"src/services/auth.ts\",\"includeLineNumbers\":true})`\n- Check imports and structure: `get_file_content({\"filePath\":\"src/utils/helpers.ts\"})`\n\n---\n\n**get_related_tests** _(cheap)_\nFind test files related to production files to understand what the code is supposed to do\n\nParameters:\n- `filePaths` (required): Production file paths\n\n**When to use:** Find test files related to production files to understand what the code is supposed to do\n\n**Examples:**\n- Find tests for modified service: `get_related_tests({\"filePaths\":[\"src/services/auth.ts\"]})`\n\n---\n\n**analyze_diff_section** _(cheap)_\nGet expanded context around specific lines in a file to better understand changes\n\nParameters:\n- `filePath` (required): File containing the section to analyze\n- `startLine` (required): Starting line number\n- `endLine` (required): Ending line number\n- `contextLines`: Number of additional context lines to show before and after (default: 10)\n\n**When to use:** Get expanded context around specific lines in a file to better understand changes\n\n**Examples:**\n- See context around confusing change: `analyze_diff_section({\"filePath\":\"src/auth.ts\",\"startLine\":45,\"endLine\":52,\"contextLines\":15})`\n\n---\n\n**get_recent_commits** _(cheap)_\nGet recent commits that modified the same files to understand recent work in this area\n\nParameters:\n- `filePaths` (required): Files to check for recent commits\n- `since`: Time period to look back (e.g., \"1 week ago\", \"2 days ago\")\n- `limit`: Maximum number of commits to return (default: 5)\n\n**When to use:** Get recent commits that modified the same files to understand recent work in this area\n\n**Examples:**\n- Check for duplicate commit messages: `get_recent_commits({\"filePaths\":[\"src/auth.ts\"],\"since\":\"1 week ago\",\"limit\":5})`\n\n---\n\n### Analysis\n\n**search_codebase** _(moderate)_\nSearch for code patterns, function names, or text across the codebase using git grep\n\nParameters:\n- `query` (required): Search pattern (can be plain text or regex)\n- `fileTypes`: Limit search to specific file extensions (e.g., [\"ts\", \"js\"])\n- `contextLines`: Number of context lines to show around matches (default: 2)\n\n**When to use:** Search for code patterns, function names, or text across the codebase using git grep\n\n**Examples:**\n- Find all uses of a renamed function: `search_codebase({\"query\":\"oldFunctionName\",\"fileTypes\":[\"ts\",\"tsx\"]})`\n- Check if pattern exists elsewhere: `search_codebase({\"query\":\"pattern.*string\",\"contextLines\":3})`\n\n---\n\n**get_file_dependencies** _(moderate)_\nFind which files import or depend on the changed files to assess change impact\n\nParameters:\n- `filePaths` (required): Files to analyze dependencies for\n\n**When to use:** Find which files import or depend on the changed files to assess change impact\n\n**Examples:**\n- Check impact of util function change: `get_file_dependencies({\"filePaths\":[\"src/utils/format.ts\"]})`\n\n---\n\n### Organization\n\n**group_files_by_concern** _(cheap)_\nAnalyze changed files and suggest logical groupings that might represent separate commits\n\nParameters:\n- `filePaths` (required): All changed files to analyze\n\n**When to use:** Analyze changed files and suggest logical groupings that might represent separate commits\n\n**Examples:**\n- Check if multiple unrelated changes should be split: `group_files_by_concern({\"filePaths\":[\"src/auth.ts\",\"README.md\",\"tests/auth.test.ts\",\"package.json\"]})`\n\n---\n\n**get_file_modification_times** _(cheap)_\nGet modification timestamps for changed files. Temporal proximity is one signal (among others) that can help identify related changes. Files modified close together MAY be part of the same logical change, but this is not guaranteed - always cross-reference with logical groupings.\n\nParameters:\n- `filePaths` (required): All changed files to analyze\n\n**When to use:** Get modification timestamps for changed files. Temporal proximity is one signal (among others) that can help identify related changes. Files modified close together MAY be part of the same logical change, but this is not guaranteed - always cross-reference with logical groupings.\n\n**Examples:**\n- Identify files modified together vs at different times: `get_file_modification_times({\"filePaths\":[\"src/auth.ts\",\"src/user.ts\",\"README.md\",\"tests/auth.test.ts\"]})`\n\n---\n\n\n\n## Your Task\n\nAnalyze the staged changes and determine the best way to commit them. Your primary goal is to create **meaningful, atomic commits** that each represent a single logical change.\n\n**CRITICAL**: When there are many changed files, especially after a long work session (multiple hours), you should almost always split them into multiple commits. A single commit with 10+ files usually indicates multiple distinct changes that should be separated.\n\nThink about:\n- What distinct features, fixes, or improvements are represented?\n- Are there natural groupings by functionality, module, or purpose?\n- When were files modified relative to each other?\n- What should reviewers focus on in each commit?\n\n## Investigation Strategy\n\nFor any non-trivial set of changes, gather multiple signals to understand how to group commits:\n\n1. **Check file modification times** using `get_file_modification_times`\n - This reveals *when* files were changed relative to each other\n - Files modified close together *may* be part of the same logical change\n - Large temporal gaps *can* indicate separate work sessions\n - Note: temporal proximity is one signal, not a guarantee of relatedness\n\n2. **Understand logical relationships** using `group_files_by_concern`\n - Groups by module, type (tests, docs, source), and directory structure\n - Reveals which files are functionally related regardless of when they were modified\n\n3. **Cross-reference both signals** to make informed decisions:\n - Files modified together AND logically related → strong candidate for same commit\n - Files modified apart BUT logically related → might still belong together\n - Files modified together BUT logically unrelated → consider splitting\n - Use your judgment - neither signal is definitive on its own\n\n4. **Investigate further** as needed:\n - get_file_content - see full context when diffs are unclear\n - get_file_history - understand how code evolved\n - get_file_dependencies - assess impact of changes\n - get_recent_commits - avoid duplicate messages\n - get_related_tests - understand behavior changes\n - search_codebase - find usage patterns\n\n## When to Split Commits\n\n**Prefer multiple commits when:**\n- Changes span multiple hours of work (check modification times!)\n- Different logical features or fixes are included\n- Test changes could be separated from production code changes\n- Documentation updates are unrelated to code changes\n- Refactoring is mixed with feature work\n- Configuration changes are mixed with implementation changes\n- Files in different modules/packages are changed for different reasons\n\n**Keep as one commit when:**\n- All changes are part of a single, cohesive feature\n- Files were modified together in a focused work session\n- Test changes directly test the production code changes\n- The changes tell a single coherent story\n\n**Default bias**: When in doubt about whether to split, **prefer splitting**. It's better to have too many focused commits than too few bloated ones. A good commit should be understandable and reviewable in isolation.\n\n## Important Context Guidelines\n\nIf additional context is provided (from context files or other sources), use your judgment:\n- If the context is relevant to these specific changes, incorporate it\n- If the context describes unrelated changes or other packages, ignore it\n- Don't force connections between unrelated information\n- Focus on accurately describing what actually changed\n\n## Writing Style\n\nWrite naturally and directly:\n- Use plain language, not corporate speak\n- Be specific and concrete\n- Avoid buzzwords and jargon\n- No emojis or excessive punctuation\n- No phrases like \"this commit\" or \"this PR\"\n- No meta-commentary about the commit itself\n\nFollow conventional commit format when appropriate (feat:, fix:, refactor:, docs:, test:, chore:), but prioritize clarity over formality.\n\n## Output Format\n\nWhen ready, format your response as:\n\nCOMMIT_MESSAGE:\n[Your commit message here - only for the FIRST group of changes if splitting]\n\nIf changes should be split into multiple commits (which is often the case with large changesets):\n\nSUGGESTED_SPLITS:\nSplit 1:\nFiles: [list of files]\nRationale: [why these belong together - mention temporal clustering and/or logical relationship]\nMessage: [commit message for this split]\n\nSplit 2:\nFiles: [list of files]\nRationale: [why these belong together]\nMessage: [commit message for this split]\n\nSplit 3:\n...\n\nOutput only the commit message and splits. No conversational remarks or follow-up offers."
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"role": "user",
|
|
48
|
+
"content": "I have staged changes that need a commit message.\n\nChanged files (1):\n - package.json\n\nDiff:\ndiff --git a/package.json b/package.json\nindex 04d3fbc..e93791f 100644\n--- a/package.json\n+++ b/package.json\n@@ -1,6 +1,6 @@\n {\n \"name\": \"@riotprompt/execution-openai\",\n- \"version\": \"0.0.4-dev.0\",\n+ \"version\": \"0.0.4\",\n \"description\": \"OpenAI provider for execution - implements Provider interface\",\n \"type\": \"module\",\n \"main\": \"./dist/index.js\",\n\n\nRecent commit history for context:\ncommit e65fb8cd33f3779fcd130833735c290c59d07f8c\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Mon Jan 12 23:41:08 2026 -0800\n\n chore(build): switch to ESM-only output, require Node 24, and target ES2024\n\ncommit 3d4aa2f5468b4a79dd498c0ba88fd93397b53160\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Mon Jan 12 22:10:33 2026 -0800\n\n chore: bump to v0.0.4-dev.0\n\ncommit 77c696fc4b15e11624eef8b36a695ec6fd5ebac1\nAuthor: Tim O'Brien <tobrien@discursive.com>\nDate: Mon Jan 12 22:09:39 2026 -0800\n\n chore(release): bump @riotprompt/execution-openai to 0.0.3 (#6)\n \n * 0.0.2-dev.0\n \n * Updated and separated tests\n \n * 0.0.3-dev.0\n \n * ci: bump GitHub Actions Node to 24 and use npm install\n \n * chore(release): bump @riotprompt/execution-openai to 0.0.3\n\n\n## Your Analysis Task\n\nGather signals to understand the changes:\n1. Use `get_file_modification_times` to see when files were modified relative to each other\n2. Use `group_files_by_concern` to understand how files relate by type/purpose\n3. Cross-reference both signals - temporal proximity and logical relatedness - to determine the best commit structure\n\nConsider:\n- What distinct features, fixes, or improvements are included?\n- Are files that were modified together also logically related?\n- Would separate commits make the history more understandable?\n\nIf changes represent multiple logical concerns, suggest splits.\n\nIf context information is provided, use it only if relevant to these specific changes.\nDon't force connections that don't exist - focus on what actually changed."
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"role": "assistant",
|
|
52
|
+
"content": null,
|
|
53
|
+
"tool_calls": [
|
|
54
|
+
{
|
|
55
|
+
"id": "call_rSq7IKqMNLsjumR1luwRAEE1",
|
|
56
|
+
"type": "function",
|
|
57
|
+
"function": {
|
|
58
|
+
"name": "get_file_modification_times",
|
|
59
|
+
"arguments": "{\"filePaths\": [\"package.json\"]}"
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"id": "call_1yNnOkCcYusnlB0gjhDuHvZZ",
|
|
64
|
+
"type": "function",
|
|
65
|
+
"function": {
|
|
66
|
+
"name": "group_files_by_concern",
|
|
67
|
+
"arguments": "{\"filePaths\": [\"package.json\"]}"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
"role": "tool",
|
|
74
|
+
"tool_call_id": "call_rSq7IKqMNLsjumR1luwRAEE1",
|
|
75
|
+
"content": "## File Modification Times (sorted oldest to newest)\n\n2026-01-13 08:29:23 package.json\n\n\n## Temporal Clusters (files modified within 10 minutes of each other)\n\nAll 1 files were modified in a single work session.\n",
|
|
76
|
+
"name": "get_file_modification_times"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"role": "tool",
|
|
80
|
+
"tool_call_id": "call_1yNnOkCcYusnlB0gjhDuHvZZ",
|
|
81
|
+
"content": "dependencies (1 files):\n - package.json\n\nSuggestion: All files appear to be related and should be in a single commit.",
|
|
82
|
+
"name": "group_files_by_concern"
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"role": "assistant",
|
|
86
|
+
"content": "COMMIT_MESSAGE:\nchore(release): bump @riotprompt/execution-openai to 0.0.4"
|
|
87
|
+
}
|
|
88
|
+
]
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
</details>
|
|
92
|
+
|
|
93
|
+
## Generated Commit Message
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
chore(release): bump @riotprompt/execution-openai to 0.0.4
|
|
97
|
+
```
|