Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); feat: add semanticOverride support for SEMANTIC memory strategies by aidandaly24 · Pull Request #696 · aws/agentcore-cli · GitHub
Skip to content

feat: add semanticOverride support for SEMANTIC memory strategies - #696

Merged
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678
Mar 27, 2026
Merged

feat: add semanticOverride support for SEMANTIC memory strategies#696
aidandaly24 merged 1 commit into
aws:mainfrom
aidandaly24:feat/semantic-override-678

Conversation

@aidandaly24

@aidandaly24aidandaly24 commented Mar 27, 2026

Copy link
Copy Markdown
Contributor

Description

Add semanticOverride support for SEMANTIC memory strategies, allowing users to customize extraction and consolidation behavior with custom prompts and model IDs.

Changes

  • Schema: Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema, and SemanticOverrideSchema with Zod validation
  • Cross-field validation: .refine() rejects semanticOverride on non-SEMANTIC strategy types with a clear error message
  • Barrel exports: Update primitives/index.ts, agentcore-project.ts for new schema/type exports
  • LLM-compacted: Update agentcore.ts interface with semanticOverride field

Schema Structure

{
"strategies": [{
"type": "SEMANTIC",
"namespaces": ["/users/{actorId}/facts"],
"semanticOverride": {
"extraction": {
"appendToPrompt": "Extract key facts about the user",
"modelId": "anthropic.claude-3-sonnet-20240229-v1:0"
},
"consolidation": {
"appendToPrompt": "Consolidate user memories",
"modelId": "anthropic.claude-3-haiku-20240307-v1:0"
}
}
}]
}

TUI Screenshots

Validation — pass and fail:
validate-pass-and-fail

agentcore.json with semanticOverride config:
agentcore-json-override-config

Synthesized CloudFormation template with SemanticOverride:
cfn-template-semantic-override

All memory unit tests passing (vitest):
unit-tests-memory-pass

Service-Side Note

The CloudFormation resource AWS::BedrockAgentCore::Memory in us-east-1 does not yet include SemanticOverride in its schema. The CLI schema validation and CDK template generation are correct — deployments with overrides will succeed once the service-side schema is updated. Backward compatibility (SEMANTIC without override) is confirmed working.

Related Issue

Closes#678

Documentation PR

N/A — pending service-side schema availability

Type of Change

  • Bug fix
  • New feature
  • Breaking change
  • Documentation update

Testing

  • I ran npm run test:unit and npm run test:integ
  • I ran npm run typecheck
  • I ran npm run lint
  • If I modified src/assets/, I ran npm run test:update-snapshots and committed the updated snapshots

Test Coverage

  • 13 new schema unit tests covering:
    • Valid extraction-only, consolidation-only, and both overrides
    • Rejection of semanticOverride on SUMMARIZATION, USER_PREFERENCE, CUSTOM strategies
    • Rejection of empty override (neither extraction nor consolidation)
    • appendToPrompt boundary validation (empty, max 30000)
    • modelId minimum length validation
    • Consolidation-only rejection on USER_PREFERENCE
  • 2 integration tests in agentcore-project.test.ts for full project spec with overrides
  • E2E deployment testing across 4 scenarios (validate, synth, deploy, invoke)

Checklist

  • I have read the CONTRIBUTING document
  • I have added any necessary tests that prove my fix is effective or my feature works
  • I have updated the documentation accordingly
  • I have added an appropriate example to the documentation to outline the feature, or no new docs are needed
  • My changes generate no new warnings
  • Any dependent changes have been merged and published

Dependent CDK PR: aws/agentcore-l3-cdk-constructs#120 (companion PR with addPropertyOverride implementation)


By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@aidandaly24
aidandaly24 requested a review from a teamMarch 27, 2026 04:32
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24

Copy link
Copy Markdown
ContributorAuthor

TUI Screenshots

Screenshots captured during E2E testing of the SemanticOverride feature:

  1. Validation (pass + fail): validate-pass-and-fail.svg

    • agentcore validate passes for valid override configs
    • agentcore validate fails with clear error for semanticOverride on SUMMARIZATION
  2. Override JSON config: agentcore-json-override-config.svg

    • Shows semanticOverride with extraction + consolidation in agentcore.json
  3. CloudFormation template: cfn-template-semantic-override.svg

    • Synthesized template with SemanticOverride.Extraction and SemanticOverride.Consolidation
  4. Unit tests: unit-tests-memory-pass.svg

    • All 28 memory schema tests passing (vitest)

View all screenshots in the gist

@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from a42ba14 to e692ae4CompareMarch 27, 2026 04:47
@github-actionsgithub-actionsBot added size/m PR size: M and removed size/m PR size: M labels Mar 27, 2026
…s#678)
Add SemanticOverride schema support to memory strategies, allowing users
to customize extraction and consolidation behavior with custom prompts
and model IDs on SEMANTIC strategy types.
Changes:
- Add SemanticExtractionOverrideSchema, SemanticConsolidationOverrideSchema,
and SemanticOverrideSchema with at-least-one validation
- Add cross-field validation rejecting semanticOverride on non-SEMANTIC types
- Export new schemas and types through barrel files
- Update LLM-compacted types with semanticOverride interface
- Add 13 new unit tests for override validation
- Add 2 integration tests for agentcore-project validation
Constraint: semanticOverride only valid on SEMANTIC strategy type
Constraint: At least one of extraction or consolidation must be provided
Rejected: Allow override on all strategy types | CFn only supports it on SEMANTIC
Confidence: high
Scope-risk: narrow
@aidandaly24
aidandaly24force-pushed the feat/semantic-override-678 branch from e692ae4 to 911f3e9CompareMarch 27, 2026 05:20
@github-actionsgithub-actionsBot removed the size/m PR size: M label Mar 27, 2026
@github-actionsgithub-actionsBot added the size/m PR size: M label Mar 27, 2026
@aidandaly24
aidandaly24 merged commit 5e0f584 into aws:mainMar 27, 2026
16 of 19 checks passed
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
aidandaly24 added a commit that referenced this pull request Mar 27, 2026
* Revert "feat: add semanticOverride support for SEMANTIC memory strategies (#678) (#696)"
This reverts commit 5e0f584.
* Revert "feat(memory): add CUSTOM strategy type to agentcore-cli (#677) (#694)"
This reverts commit beac707.
* fix: restore EPISODIC strategy to configuration.md
The revert of the CUSTOM strategy commit inadvertently removed the
EPISODIC row from the Memory Strategies table in configuration.md.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 18, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 19, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 20, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
notgitika added a commit to notgitika/agentcore-cli that referenced this pull request Aug 21, 2026
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR aws#694 made --
and aws#713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is aws#241 ("select custom memory
strategy, note there is no option to add prompts"); aws#266 removed it as a P0 to
stop users picking an unsupported option, aws#694/aws#696 added it back with
semanticOverride, and aws#713 reverted both as premature. aws#676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at aws#676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
jariy17 pushed a commit that referenced this pull request Aug 24, 2026
* feat(project): add `project add memory`
Registers a `memory` leaf under `project add`, following the same
SDK-union -> flat project-schema conversion pattern as `project add
harness`. A memory scaffolds no files, so the command only appends an
entry to `spec.memories` in agentcore.json; the L3 CDK turns that into
an `AWS::BedrockAgentCore::Memory` at deploy time.
Flags: --name, --event-expiry-duration, --strategies, --indexed-keys,
--stream-delivery-resources, --encryption-key-arn, --execution-role-arn,
--tags.
--strategies accepts two forms: a comma-separated list of strategy types
expanded with the CLI's default namespace templates, or a JSON
MemoryStrategyInput[] mirroring the CreateMemory API for strategies that
need explicit names, descriptions, or namespaces.
clientToken is excluded (it is CreateMemory idempotency and this command
makes no API call), and description is excluded until the L3 CDK schema
supports it.
* feat: add --description to 'project add memory'
Stores an optional memory description in agentcore.json, matching the
CreateMemory API's description field (max 4096 characters).
The generated CDK app pins @aws/agentcore-cdk 0.1.0-alpha.45, whose
MemorySchema is a non-strict z.object with no description field, so the key
is stripped at synth rather than rejected until
aws/agentcore-l3-cdk-constructs#325 ships and that pin is bumped. The flag
help text says so.
* feat: accept a CUSTOM memory strategy in 'project add memory'
The CDK's memory schema already models CUSTOM (@aws/agentcore-cdk
0.1.0-alpha.45 maps it to CFN customMemoryStrategy), so the CLI's four-type
enum was the outlier. A customMemoryStrategy in the --strategies JSON now
converts to { type: 'CUSTOM', name, description, namespaceTemplates }.
The shorthand form still takes managed types only: CUSTOM has no default
namespaces to expand. An extraction configuration or memoryRecordSchema is
rejected rather than dropped, since the CDK schema carries neither.
Also names the offending field in the memory validation error.
* revert: drop CUSTOM memory strategy from "project add memory"
Reverts 87be86e. I added CUSTOM because the CDK schema already had it in
MemoryStrategyTypeSchema, which turns out to be the argument PR #694 made --
and #713 reverted a day later.
The CLI has removed CUSTOM twice on purpose. Offering the type without
somewhere to put its extraction configuration is #241 ("select custom memory
strategy, note there is no option to add prompts"); #266 removed it as a P0 to
stop users picking an unsupported option, #694/#696 added it back with
semanticOverride, and #713 reverted both as premature. #676 tracks doing it
properly. The CDK keeping CUSTOM in its enum without a configuration field is
the same hole, not a licence.
So both forms are rejected again, now with an error that says why and points
at #676. The one thing kept from the reverted commit: memory validation errors
name the offending field, since issue.path was being dropped.
* refactor: drop the long-form help for --description
The one-line flag description is enough; the deploy-time caveat lives in the
PR discussion rather than in help output.
* docs: comment change
* fix: change function name and add comment for clarity
* test: add uncovered unsupported stream content type test
* style: make json example concrete, remove comments
* refactor(project): reuse shared spec validation for memory
* fix(project): validate memory JSON inputs
* fix(project): harden memory input validation
* test(project): colocate memory tests with the add/memory handler
Upstream moved the per-resource `project add` tests out of the monolithic
project.test.ts into colocated add/<resource>/index.test.ts suites (harness
in #2034, online-eval in #2048). Move the memory tests to match, with the
same locally-duplicated run/inProject helpers those suites use.
project.test.ts is now identical to upstream/refactor again, so this PR no
longer touches it. Also drops the DeserializationError, FsReadWriteJson and
ReadWriteJson imports, left dead there once the harness tests that used them
moved to add/harness/index.test.ts.
No test content changed: 187 project tests still pass, now across 10 files
instead of 9.
* refactor(project): match --strategies JSON to the agentcore.json schema
The --strategies flag re-declared its own strategy input schema, modelled
on the CreateMemory API's tagged union (semanticMemoryStrategy et al.) and
requiring a name. agentcore.json stores strategies flat with an optional
name, so the flag accepted a shape the project file never holds and
rejected one it does.
Parse the JSON form with MemoryStrategySchema itself, wrapped only for the
unsupported-field diagnostics, so the flag cannot drift from the schema.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/mPR size: M

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Built-in strategy with override not yet supported in AgentCore memory

2 participants

@aidandaly24@jesseturner21