@itaila/archetype 0.3.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +475 -0
- package/dist/audit/audit-persona.d.ts +163 -0
- package/dist/audit/audit-persona.d.ts.map +1 -0
- package/dist/audit/audit-persona.js +415 -0
- package/dist/audit/audit-persona.js.map +1 -0
- package/dist/audit/brain-reflection.d.ts +33 -0
- package/dist/audit/brain-reflection.d.ts.map +1 -0
- package/dist/audit/brain-reflection.js +148 -0
- package/dist/audit/brain-reflection.js.map +1 -0
- package/dist/audit/conversation-audit.d.ts +12 -0
- package/dist/audit/conversation-audit.d.ts.map +1 -0
- package/dist/audit/conversation-audit.js +76 -0
- package/dist/audit/conversation-audit.js.map +1 -0
- package/dist/audit/prompt-audit.d.ts +10 -0
- package/dist/audit/prompt-audit.d.ts.map +1 -0
- package/dist/audit/prompt-audit.js +153 -0
- package/dist/audit/prompt-audit.js.map +1 -0
- package/dist/audit/prompt-dump.d.ts +137 -0
- package/dist/audit/prompt-dump.d.ts.map +1 -0
- package/dist/audit/prompt-dump.js +269 -0
- package/dist/audit/prompt-dump.js.map +1 -0
- package/dist/audit/trace-integrity.d.ts +33 -0
- package/dist/audit/trace-integrity.d.ts.map +1 -0
- package/dist/audit/trace-integrity.js +109 -0
- package/dist/audit/trace-integrity.js.map +1 -0
- package/dist/audit/types.d.ts +92 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/version.d.ts +14 -0
- package/dist/audit/version.d.ts.map +1 -0
- package/dist/audit/version.js +65 -0
- package/dist/audit/version.js.map +1 -0
- package/dist/brain.d.ts +7 -0
- package/dist/brain.d.ts.map +1 -0
- package/dist/brain.js +83 -0
- package/dist/brain.js.map +1 -0
- package/dist/builder/actions.d.ts +60 -0
- package/dist/builder/actions.d.ts.map +1 -0
- package/dist/builder/actions.js +257 -0
- package/dist/builder/actions.js.map +1 -0
- package/dist/builder/browser.d.ts +140 -0
- package/dist/builder/browser.d.ts.map +1 -0
- package/dist/builder/browser.js +232 -0
- package/dist/builder/browser.js.map +1 -0
- package/dist/builder/executor.d.ts +228 -0
- package/dist/builder/executor.d.ts.map +1 -0
- package/dist/builder/executor.js +1548 -0
- package/dist/builder/executor.js.map +1 -0
- package/dist/builder/index.d.ts +24 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +24 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/node-test-discovery.d.ts +13 -0
- package/dist/builder/node-test-discovery.d.ts.map +1 -0
- package/dist/builder/node-test-discovery.js +45 -0
- package/dist/builder/node-test-discovery.js.map +1 -0
- package/dist/builder/sandbox.d.ts +172 -0
- package/dist/builder/sandbox.d.ts.map +1 -0
- package/dist/builder/sandbox.js +294 -0
- package/dist/builder/sandbox.js.map +1 -0
- package/dist/builder/workspace-files.d.ts +63 -0
- package/dist/builder/workspace-files.d.ts.map +1 -0
- package/dist/builder/workspace-files.js +190 -0
- package/dist/builder/workspace-files.js.map +1 -0
- package/dist/core/actions.d.ts +55 -0
- package/dist/core/actions.d.ts.map +1 -0
- package/dist/core/actions.js +311 -0
- package/dist/core/actions.js.map +1 -0
- package/dist/core/attachment-notes.d.ts +7 -0
- package/dist/core/attachment-notes.d.ts.map +1 -0
- package/dist/core/attachment-notes.js +38 -0
- package/dist/core/attachment-notes.js.map +1 -0
- package/dist/core/context.d.ts +10 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +108 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/crud-prompt.d.ts +16 -0
- package/dist/core/crud-prompt.d.ts.map +1 -0
- package/dist/core/crud-prompt.js +268 -0
- package/dist/core/crud-prompt.js.map +1 -0
- package/dist/core/crud-schema.d.ts +12 -0
- package/dist/core/crud-schema.d.ts.map +1 -0
- package/dist/core/crud-schema.js +42 -0
- package/dist/core/crud-schema.js.map +1 -0
- package/dist/core/effective-config.d.ts +13 -0
- package/dist/core/effective-config.d.ts.map +1 -0
- package/dist/core/effective-config.js +33 -0
- package/dist/core/effective-config.js.map +1 -0
- package/dist/core/entities.d.ts +82 -0
- package/dist/core/entities.d.ts.map +1 -0
- package/dist/core/entities.js +116 -0
- package/dist/core/entities.js.map +1 -0
- package/dist/core/entity-helpers.d.ts +47 -0
- package/dist/core/entity-helpers.d.ts.map +1 -0
- package/dist/core/entity-helpers.js +122 -0
- package/dist/core/entity-helpers.js.map +1 -0
- package/dist/core/entity-registry.d.ts +47 -0
- package/dist/core/entity-registry.d.ts.map +1 -0
- package/dist/core/entity-registry.js +54 -0
- package/dist/core/entity-registry.js.map +1 -0
- package/dist/core/eq.d.ts +13 -0
- package/dist/core/eq.d.ts.map +1 -0
- package/dist/core/eq.js +41 -0
- package/dist/core/eq.js.map +1 -0
- package/dist/core/focus-context.d.ts +19 -0
- package/dist/core/focus-context.d.ts.map +1 -0
- package/dist/core/focus-context.js +46 -0
- package/dist/core/focus-context.js.map +1 -0
- package/dist/core/focus-mode-actions.d.ts +23 -0
- package/dist/core/focus-mode-actions.d.ts.map +1 -0
- package/dist/core/focus-mode-actions.js +74 -0
- package/dist/core/focus-mode-actions.js.map +1 -0
- package/dist/core/greeting.d.ts +10 -0
- package/dist/core/greeting.d.ts.map +1 -0
- package/dist/core/greeting.js +41 -0
- package/dist/core/greeting.js.map +1 -0
- package/dist/core/identity.d.ts +13 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +54 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/knowledge.d.ts +10 -0
- package/dist/core/knowledge.d.ts.map +1 -0
- package/dist/core/knowledge.js +40 -0
- package/dist/core/knowledge.js.map +1 -0
- package/dist/core/memory-actions.d.ts +38 -0
- package/dist/core/memory-actions.d.ts.map +1 -0
- package/dist/core/memory-actions.js +181 -0
- package/dist/core/memory-actions.js.map +1 -0
- package/dist/core/memory.d.ts +35 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +168 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/peer-actions.d.ts +15 -0
- package/dist/core/peer-actions.d.ts.map +1 -0
- package/dist/core/peer-actions.js +33 -0
- package/dist/core/peer-actions.js.map +1 -0
- package/dist/core/prompt-builder.d.ts +46 -0
- package/dist/core/prompt-builder.d.ts.map +1 -0
- package/dist/core/prompt-builder.js +543 -0
- package/dist/core/prompt-builder.js.map +1 -0
- package/dist/core/prompt-mode.d.ts +3 -0
- package/dist/core/prompt-mode.d.ts.map +1 -0
- package/dist/core/prompt-mode.js +6 -0
- package/dist/core/prompt-mode.js.map +1 -0
- package/dist/core/prompted-turn.d.ts +6 -0
- package/dist/core/prompted-turn.d.ts.map +1 -0
- package/dist/core/prompted-turn.js +48 -0
- package/dist/core/prompted-turn.js.map +1 -0
- package/dist/core/request-builder.d.ts +14 -0
- package/dist/core/request-builder.d.ts.map +1 -0
- package/dist/core/request-builder.js +64 -0
- package/dist/core/request-builder.js.map +1 -0
- package/dist/core/session-routing.d.ts +23 -0
- package/dist/core/session-routing.d.ts.map +1 -0
- package/dist/core/session-routing.js +59 -0
- package/dist/core/session-routing.js.map +1 -0
- package/dist/core/voice.d.ts +6 -0
- package/dist/core/voice.d.ts.map +1 -0
- package/dist/core/voice.js +30 -0
- package/dist/core/voice.js.map +1 -0
- package/dist/engine/chat.d.ts +45 -0
- package/dist/engine/chat.d.ts.map +1 -0
- package/dist/engine/chat.js +308 -0
- package/dist/engine/chat.js.map +1 -0
- package/dist/engine/continuity.d.ts +107 -0
- package/dist/engine/continuity.d.ts.map +1 -0
- package/dist/engine/continuity.js +320 -0
- package/dist/engine/continuity.js.map +1 -0
- package/dist/engine/crud.d.ts +62 -0
- package/dist/engine/crud.d.ts.map +1 -0
- package/dist/engine/crud.js +260 -0
- package/dist/engine/crud.js.map +1 -0
- package/dist/engine/side-effects.d.ts +93 -0
- package/dist/engine/side-effects.d.ts.map +1 -0
- package/dist/engine/side-effects.js +271 -0
- package/dist/engine/side-effects.js.map +1 -0
- package/dist/engine/staging.d.ts +29 -0
- package/dist/engine/staging.d.ts.map +1 -0
- package/dist/engine/staging.js +159 -0
- package/dist/engine/staging.js.map +1 -0
- package/dist/engine/working-set.d.ts +18 -0
- package/dist/engine/working-set.d.ts.map +1 -0
- package/dist/engine/working-set.js +246 -0
- package/dist/engine/working-set.js.map +1 -0
- package/dist/evals/action-contracts.d.ts +40 -0
- package/dist/evals/action-contracts.d.ts.map +1 -0
- package/dist/evals/action-contracts.js +208 -0
- package/dist/evals/action-contracts.js.map +1 -0
- package/dist/evals/brain-bloat.d.ts +39 -0
- package/dist/evals/brain-bloat.d.ts.map +1 -0
- package/dist/evals/brain-bloat.js +167 -0
- package/dist/evals/brain-bloat.js.map +1 -0
- package/dist/evals/brain-prescriptions.d.ts +30 -0
- package/dist/evals/brain-prescriptions.d.ts.map +1 -0
- package/dist/evals/brain-prescriptions.js +148 -0
- package/dist/evals/brain-prescriptions.js.map +1 -0
- package/dist/evals/cross-layer-duplicates.d.ts +49 -0
- package/dist/evals/cross-layer-duplicates.d.ts.map +1 -0
- package/dist/evals/cross-layer-duplicates.js +289 -0
- package/dist/evals/cross-layer-duplicates.js.map +1 -0
- package/dist/evals/entity-visibility.d.ts +28 -0
- package/dist/evals/entity-visibility.d.ts.map +1 -0
- package/dist/evals/entity-visibility.js +216 -0
- package/dist/evals/entity-visibility.js.map +1 -0
- package/dist/evals/index.d.ts +19 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +11 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/judge.d.ts +22 -0
- package/dist/evals/judge.d.ts.map +1 -0
- package/dist/evals/judge.js +337 -0
- package/dist/evals/judge.js.map +1 -0
- package/dist/evals/operational-contract.d.ts +40 -0
- package/dist/evals/operational-contract.d.ts.map +1 -0
- package/dist/evals/operational-contract.js +115 -0
- package/dist/evals/operational-contract.js.map +1 -0
- package/dist/evals/prompt-content.d.ts +14 -0
- package/dist/evals/prompt-content.d.ts.map +1 -0
- package/dist/evals/prompt-content.js +104 -0
- package/dist/evals/prompt-content.js.map +1 -0
- package/dist/evals/runtime.d.ts +4 -0
- package/dist/evals/runtime.d.ts.map +1 -0
- package/dist/evals/runtime.js +197 -0
- package/dist/evals/runtime.js.map +1 -0
- package/dist/evals/sample-projects.d.ts +143 -0
- package/dist/evals/sample-projects.d.ts.map +1 -0
- package/dist/evals/sample-projects.js +644 -0
- package/dist/evals/sample-projects.js.map +1 -0
- package/dist/evals/types.d.ts +88 -0
- package/dist/evals/types.d.ts.map +1 -0
- package/dist/evals/types.js +2 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/foundation/index.d.ts +158 -0
- package/dist/foundation/index.d.ts.map +1 -0
- package/dist/foundation/index.js +256 -0
- package/dist/foundation/index.js.map +1 -0
- package/dist/index.d.ts +223 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +998 -0
- package/dist/index.js.map +1 -0
- package/dist/managed/autonomous-loop.d.ts +199 -0
- package/dist/managed/autonomous-loop.d.ts.map +1 -0
- package/dist/managed/autonomous-loop.js +451 -0
- package/dist/managed/autonomous-loop.js.map +1 -0
- package/dist/managed/conversation.d.ts +20 -0
- package/dist/managed/conversation.d.ts.map +1 -0
- package/dist/managed/conversation.js +40 -0
- package/dist/managed/conversation.js.map +1 -0
- package/dist/managed/knowledge.d.ts +7 -0
- package/dist/managed/knowledge.d.ts.map +1 -0
- package/dist/managed/knowledge.js +174 -0
- package/dist/managed/knowledge.js.map +1 -0
- package/dist/managed/memory-manager.d.ts +7 -0
- package/dist/managed/memory-manager.d.ts.map +1 -0
- package/dist/managed/memory-manager.js +18 -0
- package/dist/managed/memory-manager.js.map +1 -0
- package/dist/managed/memory-review.d.ts +45 -0
- package/dist/managed/memory-review.d.ts.map +1 -0
- package/dist/managed/memory-review.js +130 -0
- package/dist/managed/memory-review.js.map +1 -0
- package/dist/managed/storage.d.ts +2 -0
- package/dist/managed/storage.d.ts.map +1 -0
- package/dist/managed/storage.js +2 -0
- package/dist/managed/storage.js.map +1 -0
- package/dist/managed/work-history.d.ts +23 -0
- package/dist/managed/work-history.d.ts.map +1 -0
- package/dist/managed/work-history.js +31 -0
- package/dist/managed/work-history.js.map +1 -0
- package/dist/observability/index.d.ts +15 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +15 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/render-run-markdown.d.ts +90 -0
- package/dist/observability/render-run-markdown.d.ts.map +1 -0
- package/dist/observability/render-run-markdown.js +231 -0
- package/dist/observability/render-run-markdown.js.map +1 -0
- package/dist/observability/turn-reporter.d.ts +20 -0
- package/dist/observability/turn-reporter.d.ts.map +1 -0
- package/dist/observability/turn-reporter.js +106 -0
- package/dist/observability/turn-reporter.js.map +1 -0
- package/dist/persona.d.ts +49 -0
- package/dist/persona.d.ts.map +1 -0
- package/dist/persona.js +287 -0
- package/dist/persona.js.map +1 -0
- package/dist/playbook/defaults.d.ts +25 -0
- package/dist/playbook/defaults.d.ts.map +1 -0
- package/dist/playbook/defaults.js +108 -0
- package/dist/playbook/defaults.js.map +1 -0
- package/dist/playbook/invariants.d.ts +244 -0
- package/dist/playbook/invariants.d.ts.map +1 -0
- package/dist/playbook/invariants.js +259 -0
- package/dist/playbook/invariants.js.map +1 -0
- package/dist/playbook/templates.d.ts +7 -0
- package/dist/playbook/templates.d.ts.map +1 -0
- package/dist/playbook/templates.js +437 -0
- package/dist/playbook/templates.js.map +1 -0
- package/dist/providers/gemini.d.ts +73 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +536 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/types.d.ts +2 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/zod-to-gemini.d.ts +8 -0
- package/dist/providers/zod-to-gemini.d.ts.map +1 -0
- package/dist/providers/zod-to-gemini.js +148 -0
- package/dist/providers/zod-to-gemini.js.map +1 -0
- package/dist/samples/pm-spec-agent.d.ts +22 -0
- package/dist/samples/pm-spec-agent.d.ts.map +1 -0
- package/dist/samples/pm-spec-agent.js +53 -0
- package/dist/samples/pm-spec-agent.js.map +1 -0
- package/dist/types.d.ts +920 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +68 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ParsedAction, ActionDefinition, StagedBatch, StagedActionStatus, BatchSummary } from '../types.js';
|
|
2
|
+
import type { SideEffectHandler, SideEffectResult } from './side-effects.js';
|
|
3
|
+
export interface BatchCommitResult {
|
|
4
|
+
results: SideEffectResult[];
|
|
5
|
+
summary: BatchSummary;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Create a staged batch from parsed actions.
|
|
9
|
+
* Validates each action against its definition — invalid/unknown actions are auto-rejected.
|
|
10
|
+
*/
|
|
11
|
+
export declare function createBatch(actions: ParsedAction[], actionDefs: Record<string, ActionDefinition>): StagedBatch;
|
|
12
|
+
/**
|
|
13
|
+
* Update the status of a single action in the batch. Returns a new batch (immutable).
|
|
14
|
+
*/
|
|
15
|
+
export declare function updateActionStatus(batch: StagedBatch, index: number, status: StagedActionStatus): StagedBatch;
|
|
16
|
+
/**
|
|
17
|
+
* Edit an action's params, re-validating against the schema. Returns a new batch.
|
|
18
|
+
* Throws if validation fails (caller surfaces as toast).
|
|
19
|
+
*/
|
|
20
|
+
export declare function editActionParams(batch: StagedBatch, index: number, newParams: Record<string, unknown>, actionDefs: Record<string, ActionDefinition>): StagedBatch;
|
|
21
|
+
/**
|
|
22
|
+
* Commit all accepted actions in a batch by running their handlers sequentially.
|
|
23
|
+
*/
|
|
24
|
+
export declare function commitBatch(batch: StagedBatch, handlers: Record<string, SideEffectHandler>): Promise<BatchCommitResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Summarize a batch by status counts and labels.
|
|
27
|
+
*/
|
|
28
|
+
export declare function summarizeBatch(batch: StagedBatch): BatchSummary;
|
|
29
|
+
//# sourceMappingURL=staging.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging.d.ts","sourceRoot":"","sources":["../../src/engine/staging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAEhB,WAAW,EACX,kBAAkB,EAClB,YAAY,EACb,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAG5E,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,EAAE,YAAY,CAAA;CACtB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC3C,WAAW,CA0Cb;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,kBAAkB,GACzB,WAAW,CASb;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,WAAW,EAClB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC3C,WAAW,CA2Bb;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,KAAK,EAAE,WAAW,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GAC1C,OAAO,CAAC,iBAAiB,CAAC,CA0C5B;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA+B/D"}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { buildAnnotations } from '../core/actions.js';
|
|
2
|
+
/**
|
|
3
|
+
* Create a staged batch from parsed actions.
|
|
4
|
+
* Validates each action against its definition — invalid/unknown actions are auto-rejected.
|
|
5
|
+
*/
|
|
6
|
+
export function createBatch(actions, actionDefs) {
|
|
7
|
+
const stagedActions = actions.map((action, index) => {
|
|
8
|
+
// Unknown action name → rejected
|
|
9
|
+
const def = actionDefs[action.name];
|
|
10
|
+
if (!def) {
|
|
11
|
+
return {
|
|
12
|
+
index,
|
|
13
|
+
action,
|
|
14
|
+
validatedParams: action.params,
|
|
15
|
+
annotation: `Unknown action: ${action.name}`,
|
|
16
|
+
status: 'rejected',
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
// Validate params
|
|
20
|
+
const parseResult = def.schema.safeParse(action.params);
|
|
21
|
+
if (!parseResult.success) {
|
|
22
|
+
return {
|
|
23
|
+
index,
|
|
24
|
+
action,
|
|
25
|
+
validatedParams: action.params,
|
|
26
|
+
annotation: `Invalid params: ${parseResult.error.message}`,
|
|
27
|
+
status: 'rejected',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// Valid → pending
|
|
31
|
+
const annotations = buildAnnotations([{ name: action.name, params: action.params }]);
|
|
32
|
+
return {
|
|
33
|
+
index,
|
|
34
|
+
action,
|
|
35
|
+
validatedParams: parseResult.data,
|
|
36
|
+
annotation: annotations[0],
|
|
37
|
+
status: 'pending',
|
|
38
|
+
};
|
|
39
|
+
});
|
|
40
|
+
return {
|
|
41
|
+
id: crypto.randomUUID(),
|
|
42
|
+
actions: stagedActions,
|
|
43
|
+
createdAt: new Date().toISOString(),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Update the status of a single action in the batch. Returns a new batch (immutable).
|
|
48
|
+
*/
|
|
49
|
+
export function updateActionStatus(batch, index, status) {
|
|
50
|
+
if (index < 0 || index >= batch.actions.length) {
|
|
51
|
+
throw new RangeError(`Index ${index} out of bounds (batch has ${batch.actions.length} actions)`);
|
|
52
|
+
}
|
|
53
|
+
const newActions = batch.actions.map((a, i) => i === index ? { ...a, status } : a);
|
|
54
|
+
return { ...batch, actions: newActions };
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Edit an action's params, re-validating against the schema. Returns a new batch.
|
|
58
|
+
* Throws if validation fails (caller surfaces as toast).
|
|
59
|
+
*/
|
|
60
|
+
export function editActionParams(batch, index, newParams, actionDefs) {
|
|
61
|
+
if (index < 0 || index >= batch.actions.length) {
|
|
62
|
+
throw new RangeError(`Index ${index} out of bounds (batch has ${batch.actions.length} actions)`);
|
|
63
|
+
}
|
|
64
|
+
const action = batch.actions[index];
|
|
65
|
+
const def = actionDefs[action.action.name];
|
|
66
|
+
if (!def) {
|
|
67
|
+
throw new Error(`Unknown action: ${action.action.name}`);
|
|
68
|
+
}
|
|
69
|
+
const parseResult = def.schema.safeParse(newParams);
|
|
70
|
+
if (!parseResult.success) {
|
|
71
|
+
throw new Error(`Invalid params for ${action.action.name}: ${parseResult.error.message}`);
|
|
72
|
+
}
|
|
73
|
+
const annotations = buildAnnotations([{ name: action.action.name, params: newParams }]);
|
|
74
|
+
const newActions = batch.actions.map((a, i) => i === index
|
|
75
|
+
? {
|
|
76
|
+
...a,
|
|
77
|
+
validatedParams: parseResult.data,
|
|
78
|
+
annotation: annotations[0],
|
|
79
|
+
}
|
|
80
|
+
: a);
|
|
81
|
+
return { ...batch, actions: newActions };
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Commit all accepted actions in a batch by running their handlers sequentially.
|
|
85
|
+
*/
|
|
86
|
+
export async function commitBatch(batch, handlers) {
|
|
87
|
+
const results = [];
|
|
88
|
+
const accepted = batch.actions.filter(a => a.status === 'accepted');
|
|
89
|
+
for (const staged of accepted) {
|
|
90
|
+
const handler = handlers[staged.action.name];
|
|
91
|
+
if (!handler) {
|
|
92
|
+
results.push({
|
|
93
|
+
action: staged.action,
|
|
94
|
+
status: 'failed',
|
|
95
|
+
success: false,
|
|
96
|
+
error: `No handler registered for action: ${staged.action.name}`,
|
|
97
|
+
annotation: staged.annotation,
|
|
98
|
+
});
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
try {
|
|
102
|
+
const result = await handler(staged.validatedParams);
|
|
103
|
+
results.push({
|
|
104
|
+
action: staged.action,
|
|
105
|
+
status: result.success ? 'executed' : 'failed',
|
|
106
|
+
success: result.success,
|
|
107
|
+
error: result.error,
|
|
108
|
+
annotation: staged.annotation,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
results.push({
|
|
113
|
+
action: staged.action,
|
|
114
|
+
status: 'failed',
|
|
115
|
+
success: false,
|
|
116
|
+
error: `Handler error for ${staged.action.name}: ${err instanceof Error ? err.message : String(err)}`,
|
|
117
|
+
annotation: staged.annotation,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
results,
|
|
123
|
+
summary: summarizeBatch(batch),
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Summarize a batch by status counts and labels.
|
|
128
|
+
*/
|
|
129
|
+
export function summarizeBatch(batch) {
|
|
130
|
+
let accepted = 0;
|
|
131
|
+
let rejected = 0;
|
|
132
|
+
let pending = 0;
|
|
133
|
+
const acceptedLabels = [];
|
|
134
|
+
const rejectedLabels = [];
|
|
135
|
+
for (const action of batch.actions) {
|
|
136
|
+
switch (action.status) {
|
|
137
|
+
case 'accepted':
|
|
138
|
+
accepted++;
|
|
139
|
+
acceptedLabels.push(action.annotation);
|
|
140
|
+
break;
|
|
141
|
+
case 'rejected':
|
|
142
|
+
rejected++;
|
|
143
|
+
rejectedLabels.push(action.annotation);
|
|
144
|
+
break;
|
|
145
|
+
case 'pending':
|
|
146
|
+
pending++;
|
|
147
|
+
break;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
total: batch.actions.length,
|
|
152
|
+
accepted,
|
|
153
|
+
rejected,
|
|
154
|
+
pending,
|
|
155
|
+
acceptedLabels,
|
|
156
|
+
rejectedLabels,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
//# sourceMappingURL=staging.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"staging.js","sourceRoot":"","sources":["../../src/engine/staging.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ActionDefinition, ParsedAction, PersonaConfig, WorkingSetReviewDecision, WorkingSet, WorkingSetSummary } from '../types.js';
|
|
2
|
+
import type { SideEffectHandler, SideEffectResult } from './side-effects.js';
|
|
3
|
+
export interface WorkingSetCommitResult {
|
|
4
|
+
workingSet: WorkingSet;
|
|
5
|
+
results: SideEffectResult[];
|
|
6
|
+
summary: WorkingSetSummary;
|
|
7
|
+
}
|
|
8
|
+
export interface ReviewWorkingSetDeltaInput {
|
|
9
|
+
deltaId: string;
|
|
10
|
+
decision: WorkingSetReviewDecision;
|
|
11
|
+
}
|
|
12
|
+
export declare function usesWorkingSet(config: PersonaConfig): boolean;
|
|
13
|
+
export declare function buildWorkingSetSection(workingSet?: WorkingSet | null): string | null;
|
|
14
|
+
export declare function summarizeWorkingSet(workingSet?: WorkingSet | null): WorkingSetSummary | undefined;
|
|
15
|
+
export declare function reviewWorkingSetDelta(workingSet: WorkingSet, input: ReviewWorkingSetDeltaInput): WorkingSet;
|
|
16
|
+
export declare function applyActionsToWorkingSet(existing: WorkingSet | null | undefined, actions: ParsedAction[], actionDefs: Record<string, ActionDefinition> | undefined): WorkingSet | undefined;
|
|
17
|
+
export declare function commitWorkingSet(workingSet: WorkingSet, handlers: Record<string, SideEffectHandler>, deltaIds?: string[]): Promise<WorkingSetCommitResult>;
|
|
18
|
+
//# sourceMappingURL=working-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-set.d.ts","sourceRoot":"","sources":["../../src/engine/working-set.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EAGb,wBAAwB,EACxB,UAAU,EACV,iBAAiB,EAClB,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAI5E,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,OAAO,EAAE,iBAAiB,CAAA;CAC3B;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,wBAAwB,CAAA;CACnC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAE7D;AAED,wBAAgB,sBAAsB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAwBpF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,GAAG,iBAAiB,GAAG,SAAS,CAsBjG;AAYD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,0BAA0B,GAChC,UAAU,CAwCZ;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,EACvC,OAAO,EAAE,YAAY,EAAE,EACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,SAAS,GACvD,UAAU,GAAG,SAAS,CAuFxB;AAED,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAC3C,QAAQ,CAAC,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,sBAAsB,CAAC,CA4EjC"}
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import { buildAnnotations } from '../core/actions.js';
|
|
2
|
+
import { MEMORY_ACTION_NAMES } from '../core/memory-actions.js';
|
|
3
|
+
const REVIEWABLE_STATES = new Set(['accepted', 'pending']);
|
|
4
|
+
export function usesWorkingSet(config) {
|
|
5
|
+
return config.staging?.model === 'working-set';
|
|
6
|
+
}
|
|
7
|
+
export function buildWorkingSetSection(workingSet) {
|
|
8
|
+
if (!workingSet)
|
|
9
|
+
return null;
|
|
10
|
+
const visible = workingSet.deltas.filter(delta => delta.reviewState === 'accepted' && delta.commitState !== 'committed');
|
|
11
|
+
if (visible.length === 0)
|
|
12
|
+
return null;
|
|
13
|
+
const lines = visible.map(delta => {
|
|
14
|
+
const commitLabel = delta.layer === 'transport'
|
|
15
|
+
? delta.commitState === 'committed'
|
|
16
|
+
? 'committed'
|
|
17
|
+
: 'accepted but not executed'
|
|
18
|
+
: 'current draft';
|
|
19
|
+
return `- ${delta.annotation} [${delta.layer}; ${commitLabel}]`;
|
|
20
|
+
});
|
|
21
|
+
return [
|
|
22
|
+
'CURRENT WORKING SET:',
|
|
23
|
+
'Accepted meaning-layer items are the current working truth of this conversation.',
|
|
24
|
+
'Accepted transport-layer items are approved within the conversation, but not executed externally unless explicitly committed.',
|
|
25
|
+
...lines,
|
|
26
|
+
'Do not re-propose accepted items unless the user challenges them. Never claim a transport action already happened unless it is committed.',
|
|
27
|
+
].join('\n');
|
|
28
|
+
}
|
|
29
|
+
export function summarizeWorkingSet(workingSet) {
|
|
30
|
+
if (!workingSet)
|
|
31
|
+
return undefined;
|
|
32
|
+
const summary = {
|
|
33
|
+
total: workingSet.deltas.length,
|
|
34
|
+
accepted: 0,
|
|
35
|
+
pending: 0,
|
|
36
|
+
rejected: 0,
|
|
37
|
+
superseded: 0,
|
|
38
|
+
ready: 0,
|
|
39
|
+
committed: 0,
|
|
40
|
+
failed: 0,
|
|
41
|
+
};
|
|
42
|
+
for (const delta of workingSet.deltas) {
|
|
43
|
+
summary[delta.reviewState]++;
|
|
44
|
+
if (delta.commitState === 'ready')
|
|
45
|
+
summary.ready++;
|
|
46
|
+
if (delta.commitState === 'committed')
|
|
47
|
+
summary.committed++;
|
|
48
|
+
if (delta.commitState === 'failed')
|
|
49
|
+
summary.failed++;
|
|
50
|
+
}
|
|
51
|
+
return summary;
|
|
52
|
+
}
|
|
53
|
+
function deriveReviewCommitState(delta, decision) {
|
|
54
|
+
if (delta.layer === 'transport') {
|
|
55
|
+
return decision === 'accept' ? 'ready' : 'not_required';
|
|
56
|
+
}
|
|
57
|
+
return 'not_required';
|
|
58
|
+
}
|
|
59
|
+
export function reviewWorkingSetDelta(workingSet, input) {
|
|
60
|
+
const index = workingSet.deltas.findIndex(delta => delta.id === input.deltaId);
|
|
61
|
+
if (index === -1) {
|
|
62
|
+
throw new Error(`Working-set delta not found: ${input.deltaId}`);
|
|
63
|
+
}
|
|
64
|
+
const current = workingSet.deltas[index];
|
|
65
|
+
if (current.reviewState === 'superseded') {
|
|
66
|
+
throw new Error(`Cannot review superseded delta: ${input.deltaId}`);
|
|
67
|
+
}
|
|
68
|
+
if (current.commitState === 'committed') {
|
|
69
|
+
throw new Error(`Cannot review committed delta: ${input.deltaId}`);
|
|
70
|
+
}
|
|
71
|
+
const nextReviewState = input.decision === 'accept' ? 'accepted' : 'rejected';
|
|
72
|
+
const nextCommitState = deriveReviewCommitState(current, input.decision);
|
|
73
|
+
if (current.reviewState === nextReviewState &&
|
|
74
|
+
current.commitState === nextCommitState &&
|
|
75
|
+
!current.error) {
|
|
76
|
+
return workingSet;
|
|
77
|
+
}
|
|
78
|
+
const now = new Date().toISOString();
|
|
79
|
+
const deltas = [...workingSet.deltas];
|
|
80
|
+
deltas[index] = {
|
|
81
|
+
...current,
|
|
82
|
+
reviewState: nextReviewState,
|
|
83
|
+
commitState: nextCommitState,
|
|
84
|
+
updatedAt: now,
|
|
85
|
+
error: undefined,
|
|
86
|
+
};
|
|
87
|
+
return {
|
|
88
|
+
...workingSet,
|
|
89
|
+
deltas,
|
|
90
|
+
updatedAt: now,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
export function applyActionsToWorkingSet(existing, actions, actionDefs) {
|
|
94
|
+
if (!actionDefs || actions.length === 0) {
|
|
95
|
+
return existing ?? undefined;
|
|
96
|
+
}
|
|
97
|
+
const now = new Date().toISOString();
|
|
98
|
+
const base = existing ?? {
|
|
99
|
+
id: crypto.randomUUID(),
|
|
100
|
+
deltas: [],
|
|
101
|
+
createdAt: now,
|
|
102
|
+
updatedAt: now,
|
|
103
|
+
};
|
|
104
|
+
let deltas = [...base.deltas];
|
|
105
|
+
let changed = false;
|
|
106
|
+
for (const action of actions) {
|
|
107
|
+
const def = actionDefs[action.name];
|
|
108
|
+
if (!def)
|
|
109
|
+
continue;
|
|
110
|
+
if (MEMORY_ACTION_NAMES.has(action.name))
|
|
111
|
+
continue;
|
|
112
|
+
const validated = def.schema.safeParse(action.params);
|
|
113
|
+
if (!validated.success)
|
|
114
|
+
continue;
|
|
115
|
+
const layer = def.layer ?? 'meaning';
|
|
116
|
+
const reviewState = def.defaultReviewState ?? 'accepted';
|
|
117
|
+
const commitMode = def.commitMode ?? (layer === 'transport' ? 'explicit' : 'not_required');
|
|
118
|
+
if (commitMode === 'immediate')
|
|
119
|
+
continue;
|
|
120
|
+
const targetKey = def.targetKey?.(validated.data) ?? null;
|
|
121
|
+
let supersededId;
|
|
122
|
+
if (targetKey) {
|
|
123
|
+
deltas = deltas.map(delta => {
|
|
124
|
+
if (delta.targetKey === targetKey &&
|
|
125
|
+
REVIEWABLE_STATES.has(delta.reviewState) &&
|
|
126
|
+
delta.commitState !== 'committed') {
|
|
127
|
+
supersededId = delta.id;
|
|
128
|
+
changed = true;
|
|
129
|
+
return {
|
|
130
|
+
...delta,
|
|
131
|
+
reviewState: 'superseded',
|
|
132
|
+
updatedAt: now,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
return delta;
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
const annotation = buildAnnotations([{ name: action.name, params: validated.data }])[0];
|
|
139
|
+
const commitState = commitMode === 'explicit'
|
|
140
|
+
? (reviewState === 'accepted' ? 'ready' : 'not_required')
|
|
141
|
+
: commitMode === 'committed'
|
|
142
|
+
? 'committed'
|
|
143
|
+
: commitMode === 'failed'
|
|
144
|
+
? 'failed'
|
|
145
|
+
: 'not_required';
|
|
146
|
+
const delta = {
|
|
147
|
+
id: crypto.randomUUID(),
|
|
148
|
+
action,
|
|
149
|
+
validatedParams: validated.data,
|
|
150
|
+
annotation,
|
|
151
|
+
layer,
|
|
152
|
+
reviewState,
|
|
153
|
+
commitState,
|
|
154
|
+
targetKey,
|
|
155
|
+
supersedes: supersededId,
|
|
156
|
+
createdAt: now,
|
|
157
|
+
updatedAt: now,
|
|
158
|
+
};
|
|
159
|
+
deltas.push(delta);
|
|
160
|
+
changed = true;
|
|
161
|
+
}
|
|
162
|
+
if (!changed)
|
|
163
|
+
return existing ?? undefined;
|
|
164
|
+
return {
|
|
165
|
+
...base,
|
|
166
|
+
deltas,
|
|
167
|
+
updatedAt: now,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
export async function commitWorkingSet(workingSet, handlers, deltaIds) {
|
|
171
|
+
const allowed = deltaIds ? new Set(deltaIds) : null;
|
|
172
|
+
const results = [];
|
|
173
|
+
const now = new Date().toISOString();
|
|
174
|
+
const deltas = [...workingSet.deltas];
|
|
175
|
+
for (let i = 0; i < deltas.length; i++) {
|
|
176
|
+
const delta = deltas[i];
|
|
177
|
+
if (delta.layer !== 'transport')
|
|
178
|
+
continue;
|
|
179
|
+
if (delta.reviewState !== 'accepted')
|
|
180
|
+
continue;
|
|
181
|
+
if (delta.commitState !== 'ready')
|
|
182
|
+
continue;
|
|
183
|
+
if (allowed && !allowed.has(delta.id))
|
|
184
|
+
continue;
|
|
185
|
+
const handler = handlers[delta.action.name];
|
|
186
|
+
if (!handler) {
|
|
187
|
+
deltas[i] = {
|
|
188
|
+
...delta,
|
|
189
|
+
commitState: 'failed',
|
|
190
|
+
updatedAt: now,
|
|
191
|
+
error: `No handler registered for action: ${delta.action.name}`,
|
|
192
|
+
};
|
|
193
|
+
results.push({
|
|
194
|
+
action: delta.action,
|
|
195
|
+
status: 'failed',
|
|
196
|
+
success: false,
|
|
197
|
+
error: `No handler registered for action: ${delta.action.name}`,
|
|
198
|
+
annotation: delta.annotation,
|
|
199
|
+
});
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const outcome = await handler(delta.validatedParams);
|
|
204
|
+
deltas[i] = {
|
|
205
|
+
...delta,
|
|
206
|
+
commitState: outcome.success ? 'committed' : 'failed',
|
|
207
|
+
updatedAt: now,
|
|
208
|
+
error: outcome.error,
|
|
209
|
+
};
|
|
210
|
+
results.push({
|
|
211
|
+
action: delta.action,
|
|
212
|
+
status: outcome.success ? 'executed' : 'failed',
|
|
213
|
+
success: outcome.success,
|
|
214
|
+
error: outcome.error,
|
|
215
|
+
annotation: delta.annotation,
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
catch (err) {
|
|
219
|
+
const message = `Handler error for ${delta.action.name}: ${err instanceof Error ? err.message : String(err)}`;
|
|
220
|
+
deltas[i] = {
|
|
221
|
+
...delta,
|
|
222
|
+
commitState: 'failed',
|
|
223
|
+
updatedAt: now,
|
|
224
|
+
error: message,
|
|
225
|
+
};
|
|
226
|
+
results.push({
|
|
227
|
+
action: delta.action,
|
|
228
|
+
status: 'failed',
|
|
229
|
+
success: false,
|
|
230
|
+
error: message,
|
|
231
|
+
annotation: delta.annotation,
|
|
232
|
+
});
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
const nextWorkingSet = {
|
|
236
|
+
...workingSet,
|
|
237
|
+
deltas,
|
|
238
|
+
updatedAt: now,
|
|
239
|
+
};
|
|
240
|
+
return {
|
|
241
|
+
workingSet: nextWorkingSet,
|
|
242
|
+
results,
|
|
243
|
+
summary: summarizeWorkingSet(nextWorkingSet),
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=working-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"working-set.js","sourceRoot":"","sources":["../../src/engine/working-set.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action & entity contract auditor — catches the "malformed tool call" pattern
|
|
3
|
+
* at its real source: ambiguous contracts.
|
|
4
|
+
*
|
|
5
|
+
* When an AI emits a malformed or wrong-shaped action, the instinct is to
|
|
6
|
+
* assume the AI is "dumb" and add validation/boxing in code. The AI is as
|
|
7
|
+
* capable as the engineer — the problem is almost always that the contract
|
|
8
|
+
* (name + schema + description + field describe() annotations) didn't
|
|
9
|
+
* clearly tell it what the action represents.
|
|
10
|
+
*
|
|
11
|
+
* This audit flags the specific shapes that force the AI to guess:
|
|
12
|
+
* - Generic action/entity names (data, handle, process, update, etc.)
|
|
13
|
+
* - Self-documenting names with long descriptions that restate the name
|
|
14
|
+
* - Vague schemas (any types, untyped strings that should be enums, etc.)
|
|
15
|
+
* - Missing field descriptions on non-obvious fields
|
|
16
|
+
* - Fights between name/description (e.g., name says "send", description says "draft")
|
|
17
|
+
*/
|
|
18
|
+
import type { PersonaConfig } from '../types.js';
|
|
19
|
+
export interface ActionContractAuditInput {
|
|
20
|
+
config: PersonaConfig;
|
|
21
|
+
}
|
|
22
|
+
export interface ActionContractIssue {
|
|
23
|
+
severity: 'error' | 'warn';
|
|
24
|
+
/** 'action' or 'entity'. */
|
|
25
|
+
surface: 'action' | 'entity';
|
|
26
|
+
/** The action or entity name. */
|
|
27
|
+
name: string;
|
|
28
|
+
/** Which aspect of the contract is unclear. */
|
|
29
|
+
principle: 'generic-name' | 'self-documenting-overdocumented' | 'missing-description' | 'missing-field-description' | 'vague-schema-type' | 'name-description-conflict';
|
|
30
|
+
/** Concrete explanation. */
|
|
31
|
+
message: string;
|
|
32
|
+
/** Suggested fix. */
|
|
33
|
+
suggestion: string;
|
|
34
|
+
}
|
|
35
|
+
export interface ActionContractAuditResult {
|
|
36
|
+
pass: boolean;
|
|
37
|
+
issues: ActionContractIssue[];
|
|
38
|
+
}
|
|
39
|
+
export declare function auditActionContracts(input: ActionContractAuditInput): ActionContractAuditResult;
|
|
40
|
+
//# sourceMappingURL=action-contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-contracts.d.ts","sourceRoot":"","sources":["../../src/evals/action-contracts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAkC,MAAM,aAAa,CAAA;AAGhF,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,aAAa,CAAA;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;IAC1B,4BAA4B;IAC5B,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAA;IAC5B,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAA;IACZ,+CAA+C;IAC/C,SAAS,EACL,cAAc,GACd,iCAAiC,GACjC,qBAAqB,GACrB,2BAA2B,GAC3B,mBAAmB,GACnB,2BAA2B,CAAA;IAC/B,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAA;IACf,qBAAqB;IACrB,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,OAAO,CAAA;IACb,MAAM,EAAE,mBAAmB,EAAE,CAAA;CAC9B;AAoBD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,wBAAwB,GAAG,yBAAyB,CAgB/F"}
|