@toolproof-core/lib 1.0.36 → 1.0.37

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.
Files changed (78) hide show
  1. package/dist/integrations/firebase/firebaseAdminHelpers.d.ts +1 -2
  2. package/dist/integrations/firebase/firebaseAdminHelpers.js +5 -14
  3. package/dist/lookups/lookups.d.ts +17 -24
  4. package/dist/lookups/lookups.js +10 -0
  5. package/dist/types/types.d.ts +10 -6
  6. package/dist/utils/cosmosDataExtraction.d.ts +5 -0
  7. package/dist/utils/cosmosDataExtraction.js +15 -0
  8. package/dist/utils/identifierGeneration.d.ts +2 -0
  9. package/dist/utils/identifierGeneration.js +5 -0
  10. package/dist/utils/mutableStrategyOverlay.d.ts +55 -0
  11. package/dist/utils/mutableStrategyOverlay.js +115 -0
  12. package/dist/utils/resourceCreation.d.ts +11 -0
  13. package/dist/utils/resourceCreation.js +32 -0
  14. package/dist/utils/stepCreation.d.ts +9 -0
  15. package/dist/utils/stepCreation.js +79 -0
  16. package/dist/utils/stepParallelization.d.ts +2 -0
  17. package/dist/utils/stepParallelization.js +129 -0
  18. package/dist/utils/strategyAssembly.d.ts +3 -0
  19. package/dist/utils/strategyAssembly.js +6 -0
  20. package/dist/utils/strategyCanonicalization.d.ts +4 -0
  21. package/dist/utils/strategyCanonicalization.js +215 -0
  22. package/dist/utils/strategyExtraction.d.ts +17 -0
  23. package/dist/utils/strategyExtraction.js +88 -0
  24. package/dist/utils/strategyStateResolution.d.ts +17 -0
  25. package/dist/utils/{resolveStrategyStateChain.js → strategyStateResolution.js} +5 -4
  26. package/dist/utils/strategyThreading.d.ts +2 -0
  27. package/dist/utils/strategyThreading.js +10 -0
  28. package/dist/utils/toolStepPaths.d.ts +2 -0
  29. package/dist/utils/toolStepPaths.js +21 -0
  30. package/package.json +41 -21
  31. package/src/integrations/firebase/firebaseAdminHelpers.ts +5 -17
  32. package/src/lookups/lookups.ts +16 -6
  33. package/src/types/types.ts +10 -4
  34. package/src/utils/cosmosDataExtraction.ts +25 -0
  35. package/src/utils/identifierGeneration.ts +12 -0
  36. package/src/utils/mutableStrategyOverlay.ts +286 -0
  37. package/src/utils/resourceCreation.ts +87 -0
  38. package/src/utils/stepCreation.ts +114 -0
  39. package/src/utils/stepParallelization.ts +181 -0
  40. package/src/utils/strategyAssembly.ts +14 -0
  41. package/src/utils/strategyCanonicalization.ts +294 -0
  42. package/src/utils/strategyExtraction.ts +150 -0
  43. package/src/utils/strategyStateResolution.ts +57 -0
  44. package/src/utils/strategyThreading.ts +27 -0
  45. package/src/utils/toolStepPaths.ts +34 -0
  46. package/tsconfig.tsbuildinfo +1 -1
  47. package/dist/integrations/firebase/createStep.d.ts +0 -10
  48. package/dist/integrations/firebase/createStep.js +0 -17
  49. package/dist/integrations/firebase/createThreadedStrategy.d.ts +0 -2
  50. package/dist/integrations/firebase/createThreadedStrategy.js +0 -8
  51. package/dist/utils/creation/resourceCreation.d.ts +0 -21
  52. package/dist/utils/creation/resourceCreation.js +0 -67
  53. package/dist/utils/creation/stepCreation.d.ts +0 -10
  54. package/dist/utils/creation/stepCreation.js +0 -64
  55. package/dist/utils/creation/threadedStrategyCreation.d.ts +0 -18
  56. package/dist/utils/creation/threadedStrategyCreation.js +0 -16
  57. package/dist/utils/extractData.d.ts +0 -12
  58. package/dist/utils/extractData.js +0 -78
  59. package/dist/utils/parallelizeSteps.d.ts +0 -3
  60. package/dist/utils/parallelizeSteps.js +0 -159
  61. package/dist/utils/resolveStrategyStateChain.d.ts +0 -20
  62. package/dist/utils/roleSpec.d.ts +0 -16
  63. package/dist/utils/roleSpec.js +0 -57
  64. package/dist/utils/strategyState.d.ts +0 -12
  65. package/dist/utils/strategyState.js +0 -58
  66. package/dist/utils_2/threadedStrategyCreation.d.ts +0 -5
  67. package/dist/utils_2/threadedStrategyCreation.js +0 -12
  68. package/src/integrations/firebase/createStep.ts +0 -41
  69. package/src/integrations/firebase/createThreadedStrategy.ts +0 -19
  70. package/src/utils/creation/resourceCreation.ts +0 -140
  71. package/src/utils/creation/stepCreation.ts +0 -95
  72. package/src/utils/creation/threadedStrategyCreation.ts +0 -42
  73. package/src/utils/extractData.ts +0 -137
  74. package/src/utils/parallelizeSteps.ts +0 -239
  75. package/src/utils/resolveStrategyStateChain.ts +0 -58
  76. package/src/utils/roleSpec.ts +0 -84
  77. package/src/utils/strategyState.ts +0 -128
  78. package/src/utils_2/threadedStrategyCreation.ts +0 -19
@@ -1,4 +1,3 @@
1
1
  import type { ResourceTypeHandle } from '@toolproof-core/genesis';
2
- import type { IdentifierName, IdentifierStringByName, ResourcesByType } from '../../types/types.js';
3
- export declare function getNewId<K extends IdentifierName>(identifierName: K): IdentifierStringByName<K>;
2
+ import type { ResourcesByType } from '../../types/types.js';
4
3
  export declare function listResources(resourceTypeHandles: ResourceTypeHandle[]): Promise<ResourcesByType>;
@@ -1,17 +1,8 @@
1
- import { CONSTANTS, MAPPINGS } from '../../lookups/lookups.js';
1
+ import { CONSTANTS } from '../../lookups/lookups.js';
2
2
  import { dbAdmin, storageAdmin } from './firebaseAdminInit.js';
3
- export function getNewId(identifierName) {
4
- const prefix = MAPPINGS.IdentifierNameToPrefix[identifierName];
5
- const docRef = dbAdmin
6
- .collection(CONSTANTS.Persistence.Collections.resources)
7
- .doc(identifierName)
8
- .collection(CONSTANTS.Persistence.Collections.members)
9
- .doc();
10
- return (prefix + docRef.id);
11
- }
12
3
  export async function listResources(resourceTypeHandles) {
13
- const bucketResources = storageAdmin.bucket(CONSTANTS.Persistence.Buckets.tp_resources);
14
- const bucketStrategies = storageAdmin.bucket(CONSTANTS.Persistence.Buckets.tp_strategies);
4
+ const resourcesBucket = storageAdmin.bucket(CONSTANTS.Persistence.Buckets.tp_resources);
5
+ const strategiesBucket = storageAdmin.bucket(CONSTANTS.Persistence.Buckets.tp_strategies);
15
6
  async function fetchTimestampedMetadataUnder(resourceTypeHandle) {
16
7
  const snapshot = await dbAdmin
17
8
  .collection(CONSTANTS.Persistence.Collections.resources)
@@ -36,8 +27,8 @@ export async function listResources(resourceTypeHandles) {
36
27
  }
37
28
  async function fetchProjection(resourceTypeHandle, resourceId) {
38
29
  const bucket = resourceTypeHandle === CONSTANTS.Handles.ResourceTypes.TYPE_Strategy
39
- ? bucketStrategies
40
- : bucketResources;
30
+ ? strategiesBucket
31
+ : resourcesBucket;
41
32
  const file = bucket.file(`${resourceTypeHandle}/${resourceId}`);
42
33
  const [exists] = await file.exists();
43
34
  if (!exists) {
@@ -15,11 +15,12 @@ export declare const CONSTANTS: {
15
15
  readonly GraphBuildStrategy: "GraphBuildStrategy";
16
16
  };
17
17
  };
18
+ readonly Cosmos: {
19
+ readonly ErrorOutputRoleName: "ErrorOutput";
20
+ };
18
21
  readonly Names: {
19
22
  readonly AtomicTypeRef: "AtomicTypeRef";
20
23
  readonly BaseResource: "BaseResource";
21
- readonly BaseStrategy: "BaseStrategy";
22
- readonly BaseToolStepPathSpec: "BaseToolStepPathSpec";
23
24
  readonly BaseTracePoint: "BaseTracePoint";
24
25
  readonly Boolean: "Boolean";
25
26
  readonly BranchStep: "BranchStep";
@@ -35,12 +36,9 @@ export declare const CONSTANTS: {
35
36
  readonly GenesisProvenance: "GenesisProvenance";
36
37
  readonly Goal: "Goal";
37
38
  readonly GoalHandle: "GoalHandle";
38
- readonly GraphEndTracePoint: "GraphEndTracePoint";
39
- readonly GraphStartTracePoint: "GraphStartTracePoint";
40
39
  readonly InputPotential: "InputPotential";
41
40
  readonly InputResource: "InputResource";
42
41
  readonly InternalInputPotential: "InternalInputPotential";
43
- readonly InterruptTracePoint: "InterruptTracePoint";
44
42
  readonly JsonScalarLink: "JsonScalarLink";
45
43
  readonly JsonSchemaObject: "JsonSchemaObject";
46
44
  readonly Name: "Name";
@@ -71,9 +69,13 @@ export declare const CONSTANTS: {
71
69
  readonly StepsByThreadIndexFacet: "StepsByThreadIndexFacet";
72
70
  readonly StepsFacet: "StepsFacet";
73
71
  readonly Strategy: "Strategy";
72
+ readonly StrategyEndTracePoint: "StrategyEndTracePoint";
73
+ readonly StrategyFacet: "StrategyFacet";
74
74
  readonly StrategyHandle: "StrategyHandle";
75
- readonly StrategyKind: "StrategyKind";
76
75
  readonly StrategyProvenance: "StrategyProvenance";
76
+ readonly StrategyStartTracePoint: "StrategyStartTracePoint";
77
+ readonly StrategyState: "StrategyState";
78
+ readonly StrategyStateFacet: "StrategyStateFacet";
77
79
  readonly StrategyStateInputEntry: "StrategyStateInputEntry";
78
80
  readonly StrategyStateInputEntryByRoleName: "StrategyStateInputEntryByRoleName";
79
81
  readonly StrategyStateInputKind: "StrategyStateInputKind";
@@ -81,12 +83,7 @@ export declare const CONSTANTS: {
81
83
  readonly StrategyTraceHandle: "StrategyTraceHandle";
82
84
  readonly Suite: "Suite";
83
85
  readonly SuiteIngestorInputSchema: "SuiteIngestorInputSchema";
84
- readonly ThreadedStrategy: "ThreadedStrategy";
85
- readonly ThreadedStrategyFacet: "ThreadedStrategyFacet";
86
- readonly ThreadedStrategyState: "ThreadedStrategyState";
87
- readonly ThreadedStrategyStateFacet: "ThreadedStrategyStateFacet";
88
- readonly ThreadedToolStepPath: "ThreadedToolStepPath";
89
- readonly ThreadedToolStepPathSpec: "ThreadedToolStepPathSpec";
86
+ readonly SuspendedTracePoint: "SuspendedTracePoint";
90
87
  readonly TickTracePoint: "TickTracePoint";
91
88
  readonly TimestampedResource: "TimestampedResource";
92
89
  readonly Tool: "Tool";
@@ -95,17 +92,13 @@ export declare const CONSTANTS: {
95
92
  readonly ToolStepPath: "ToolStepPath";
96
93
  readonly ToolStepPathSlot: "ToolStepPathSlot";
97
94
  readonly ToolStepPathSlotFacet: "ToolStepPathSlotFacet";
95
+ readonly ToolStepPathSpec: "ToolStepPathSpec";
98
96
  readonly ToolStepRoleAddress: "ToolStepRoleAddress";
99
97
  readonly TracePoint: "TracePoint";
100
98
  readonly TracePointCounterSnapshot: "TracePointCounterSnapshot";
101
99
  readonly TracePointDelta: "TracePointDelta";
102
100
  readonly TracePointKind: "TracePointKind";
103
101
  readonly TypeRef: "TypeRef";
104
- readonly UnthreadedStrategy: "UnthreadedStrategy";
105
- readonly UnthreadedStrategyState: "UnthreadedStrategyState";
106
- readonly UnthreadedStrategyStateFacet: "UnthreadedStrategyStateFacet";
107
- readonly UnthreadedToolStepPath: "UnthreadedToolStepPath";
108
- readonly UnthreadedToolStepPathSpec: "UnthreadedToolStepPathSpec";
109
102
  readonly WhileStep: "WhileStep";
110
103
  };
111
104
  readonly Handles: {
@@ -192,25 +185,25 @@ export declare const CONSTANTS: {
192
185
  readonly while: "while";
193
186
  readonly for: "for";
194
187
  };
195
- readonly StrategyKind: {
196
- readonly unthreaded: "unthreaded";
197
- readonly threaded: "threaded";
198
- };
199
188
  readonly StrategyStateInputKind: {
200
189
  readonly inputResource: "inputResource";
201
190
  readonly externalInputPotential: "externalInputPotential";
202
191
  readonly internalInputPotential: "internalInputPotential";
203
192
  };
204
193
  readonly TracePointKind: {
205
- readonly graph_start: "graph_start";
194
+ readonly strategy_start: "strategy_start";
206
195
  readonly tick: "tick";
207
- readonly interrupt: "interrupt";
208
- readonly graph_end: "graph_end";
196
+ readonly suspended: "suspended";
197
+ readonly strategy_end: "strategy_end";
209
198
  };
210
199
  };
211
200
  };
212
201
  export declare const MAPPINGS: {
213
202
  readonly IdentifierNameToPrefix: {
203
+ readonly ToolStepKey: "TOOL_STEP-";
204
+ readonly BranchStepKey: "BRANCH_STEP-";
205
+ readonly WhileStepKey: "WHILE_STEP-";
206
+ readonly ForStepKey: "FOR_STEP-";
214
207
  readonly GoalHandle: "GOAL-";
215
208
  readonly ResourceId: "RESOURCE-";
216
209
  readonly ResourceTypeHandle: "TYPE-";
@@ -17,7 +17,17 @@ export const CONSTANTS = {
17
17
  GraphBuildStrategy: 'GraphBuildStrategy',
18
18
  },
19
19
  },
20
+ Cosmos: {
21
+ ErrorOutputRoleName: 'ErrorOutput',
22
+ }
20
23
  };
21
24
  export const MAPPINGS = {
22
25
  ..._MAPPINGS,
26
+ IdentifierNameToPrefix: {
27
+ ..._MAPPINGS.IdentifierNameToPrefix,
28
+ ToolStepKey: 'TOOL_STEP-',
29
+ BranchStepKey: 'BRANCH_STEP-',
30
+ WhileStepKey: 'WHILE_STEP-',
31
+ ForStepKey: 'FOR_STEP-',
32
+ },
23
33
  };
@@ -1,16 +1,20 @@
1
1
  import type { Resource, ResourceTypeHandle } from '@toolproof-core/genesis/types';
2
2
  import { CONSTANTS } from '../lookups/lookups.js';
3
3
  import { MAPPINGS } from '../lookups/lookups.js';
4
- export type Bucket = typeof CONSTANTS.Persistence.Buckets.tp_resources;
4
+ export type Bucket = keyof typeof CONSTANTS.Persistence.Buckets;
5
5
  export type Collection = keyof typeof CONSTANTS.Persistence.Collections;
6
6
  export type SchemaLike = Record<string, unknown>;
7
7
  export type ResourcesByType = Record<ResourceTypeHandle, Resource[]>;
8
8
  export type IdentifierName = keyof typeof MAPPINGS.IdentifierNameToPrefix;
9
9
  export type IdentifierStringByName<K extends IdentifierName> = `${(typeof MAPPINGS.IdentifierNameToPrefix)[K]}${string}`;
10
- export interface SmallBaseProjection<T extends string = string> {
11
- id: T;
12
- }
13
- export interface LargeBaseProjection<T extends string = string> extends SmallBaseProjection<T> {
10
+ export type ItemKey = string;
11
+ export type BaseItem = {
12
+ itemKey: ItemKey;
13
+ };
14
+ export type DocumentedBaseItem = BaseItem & {
14
15
  name: string;
15
16
  description: string;
16
- }
17
+ };
18
+ export type Item = DocumentedBaseItem & {
19
+ label: string;
20
+ };
@@ -0,0 +1,5 @@
1
+ import type { Resource, TimestampedResource } from '@toolproof-core/genesis';
2
+ export declare function timestampedResourceToResource(timestampedResource: TimestampedResource): Resource;
3
+ export declare function extractProjectionMapByHandle<TKey extends string, TProjection extends {
4
+ handle: TKey;
5
+ }>(resources: Resource[] | undefined): Map<TKey, TProjection>;
@@ -0,0 +1,15 @@
1
+ export function timestampedResourceToResource(timestampedResource) {
2
+ const { timestamp: _timestamp, ...resource } = timestampedResource;
3
+ return resource;
4
+ }
5
+ export function extractProjectionMapByHandle(resources) {
6
+ const map = new Map();
7
+ for (const resource of resources ?? []) {
8
+ const projection = resource.projection;
9
+ if (!projection || typeof projection !== 'object' || !projection.handle) {
10
+ continue;
11
+ }
12
+ map.set(projection.handle, projection);
13
+ }
14
+ return map;
15
+ }
@@ -0,0 +1,2 @@
1
+ import type { IdentifierName, IdentifierStringByName } from '../types/types.js';
2
+ export declare function generateIdentifier<K extends IdentifierName>(identifierName: K): IdentifierStringByName<K>;
@@ -0,0 +1,5 @@
1
+ import { MAPPINGS } from '../lookups/lookups.js';
2
+ export function generateIdentifier(identifierName) {
3
+ const prefix = MAPPINGS.IdentifierNameToPrefix[identifierName];
4
+ return (prefix + crypto.randomUUID());
5
+ }
@@ -0,0 +1,55 @@
1
+ import type { BranchStep, Case, ExternalInputPotential, ForStep, InputResource, InternalInputPotential, Resource, RoleName, Strategy, Tool, ToolHandle, ToolStep, ToolStepRoleAddress, WhileStep } from '@toolproof-core/genesis';
2
+ export type MutableToolStepKey = string;
3
+ export type MutableBranchStepKey = string;
4
+ export type MutableWhileStepKey = string;
5
+ export type MutableForStepKey = string;
6
+ export type MutableLoopStepKey = MutableWhileStepKey | MutableForStepKey;
7
+ export type MutableMacroStepKey = MutableBranchStepKey | MutableLoopStepKey;
8
+ export type MutableInputResource = InputResource;
9
+ export type MutableToolStepRoleAddress<TKey extends string = MutableToolStepKey> = Omit<ToolStepRoleAddress, 'toolStepPath'> & {
10
+ toolStepKey: TKey;
11
+ };
12
+ export type MutableInternalInputPotential<TKey extends string = MutableToolStepKey> = Omit<InternalInputPotential, 'toolStepRoleAddress'> & {
13
+ toolStepRoleAddress: MutableToolStepRoleAddress<TKey>;
14
+ };
15
+ export type MutableExternalInputPotential = ExternalInputPotential;
16
+ export type MutableStrategyStateInputEntry<TKey extends string = MutableToolStepKey> = MutableInputResource | MutableInternalInputPotential<TKey> | MutableExternalInputPotential;
17
+ export type MutableStrategyStateInputEntryByRoleName<TKey extends string = MutableToolStepKey> = Partial<Record<RoleName, MutableStrategyStateInputEntry<TKey>>>;
18
+ export type MutableStrategyState<TKey extends string = MutableToolStepKey> = Partial<Record<TKey, MutableStrategyStateInputEntryByRoleName<TKey>>>;
19
+ export type MutableToolStep<TKey extends string = MutableToolStepKey> = ToolStep & {
20
+ toolStepKey: TKey;
21
+ };
22
+ export type MutableCase<TKey extends string = MutableToolStepKey> = Omit<Case, 'when' | 'what'> & {
23
+ when: MutableToolStep<TKey>;
24
+ what: MutableToolStep<TKey>;
25
+ };
26
+ export type MutableBranchStep<TKey extends string = MutableToolStepKey> = Omit<BranchStep, 'cases'> & {
27
+ macroStepKey: MutableBranchStepKey;
28
+ cases: [MutableCase<TKey>, ...MutableCase<TKey>[]];
29
+ };
30
+ export type MutableWhileStep<TKey extends string = MutableToolStepKey> = Omit<WhileStep, 'case'> & {
31
+ macroStepKey: MutableWhileStepKey;
32
+ case: MutableCase<TKey>;
33
+ };
34
+ export type MutableForStep<TKey extends string = MutableToolStepKey> = Omit<ForStep, 'case'> & {
35
+ macroStepKey: MutableForStepKey;
36
+ case: MutableCase<TKey>;
37
+ };
38
+ export type MutableStep<TKey extends string = MutableToolStepKey> = MutableToolStep<TKey> | MutableBranchStep<TKey> | MutableWhileStep<TKey> | MutableForStep<TKey>;
39
+ export type MutableStrategy<TKey extends string = MutableToolStepKey, TStep extends MutableStep<TKey> = MutableStep<TKey>, TState extends MutableStrategyState<TKey> = MutableStrategyState<TKey>> = Omit<Strategy, 'stepsByThreadIndex' | 'strategyState'> & {
40
+ stepsByThreadIndex: TStep[][];
41
+ strategyState: TState;
42
+ };
43
+ export declare function getAuthoringSteps<TKey extends string = MutableToolStepKey, TStep extends MutableStep<TKey> = MutableStep<TKey>, TState extends MutableStrategyState<TKey> = MutableStrategyState<TKey>>(strategy: MutableStrategy<TKey, TStep, TState>): TStep[];
44
+ export declare function setAuthoringSteps<// ATTENTION
45
+ TKey extends string = MutableToolStepKey, TStep extends MutableStep<TKey> = MutableStep<TKey>, TState extends MutableStrategyState<TKey> = MutableStrategyState<TKey>>(strategy: MutableStrategy<TKey, TStep, TState>, steps: TStep[]): MutableStrategy<TKey, TStep, TState>;
46
+ export declare function getStrategyStateInputEntryByRoleName<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, toolStepKey: TKey): MutableStrategyStateInputEntryByRoleName<TKey> | undefined;
47
+ export declare function getStrategyStateInputEntry<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, toolStepRoleAddress: MutableToolStepRoleAddress<TKey>): MutableStrategyStateInputEntry<TKey> | undefined;
48
+ export declare function setStrategyStateInputEntry<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, toolStepRoleAddress: MutableToolStepRoleAddress<TKey>, entry: MutableStrategyStateInputEntry<TKey>): TStrategyState;
49
+ export declare function clearInputBinding<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, toolStepRoleAddress: MutableToolStepRoleAddress<TKey>): TStrategyState;
50
+ export declare function bindInputResource<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, target: MutableToolStepRoleAddress<TKey>, resource: Resource): TStrategyState;
51
+ export declare function bindInternalInputPotential<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, targetAddress: MutableToolStepRoleAddress<TKey>, sourceAddress: MutableToolStepRoleAddress<TKey>, context: {
52
+ toolStepByKey: ReadonlyMap<TKey, MutableToolStep<TKey>>;
53
+ toolMap: ReadonlyMap<ToolHandle, Tool>;
54
+ }): TStrategyState;
55
+ export declare function bindExternalInputPotential<TKey extends string, TStrategyState extends MutableStrategyState<TKey>>(strategyState: TStrategyState, target: MutableToolStepRoleAddress<TKey>): TStrategyState;
@@ -0,0 +1,115 @@
1
+ import { extractResourceTypeHandleFromRoleValue } from './strategyExtraction.js';
2
+ export function getAuthoringSteps(strategy) {
3
+ return strategy.stepsByThreadIndex[0] ?? [];
4
+ }
5
+ export function setAuthoringSteps(strategy, steps) {
6
+ const nextStepsByThreadIndex = [...strategy.stepsByThreadIndex];
7
+ nextStepsByThreadIndex[0] = steps;
8
+ return {
9
+ ...strategy,
10
+ stepsByThreadIndex: nextStepsByThreadIndex,
11
+ };
12
+ }
13
+ export function getStrategyStateInputEntryByRoleName(strategyState, toolStepKey) {
14
+ return strategyState[toolStepKey];
15
+ }
16
+ export function getStrategyStateInputEntry(strategyState, toolStepRoleAddress) {
17
+ const inputEntryByRoleName = getStrategyStateInputEntryByRoleName(strategyState, toolStepRoleAddress.toolStepKey);
18
+ return inputEntryByRoleName?.[toolStepRoleAddress.roleName];
19
+ }
20
+ export function setStrategyStateInputEntry(strategyState, toolStepRoleAddress, entry) {
21
+ const inputEntryByRoleName = getStrategyStateInputEntryByRoleName(strategyState, toolStepRoleAddress.toolStepKey) ?? {};
22
+ return {
23
+ ...strategyState,
24
+ [toolStepRoleAddress.toolStepKey]: {
25
+ ...inputEntryByRoleName,
26
+ [toolStepRoleAddress.roleName]: entry,
27
+ },
28
+ };
29
+ }
30
+ export function clearInputBinding(strategyState, toolStepRoleAddress) {
31
+ const inputEntryByRoleName = getStrategyStateInputEntryByRoleName(strategyState, toolStepRoleAddress.toolStepKey);
32
+ if (!inputEntryByRoleName || !(toolStepRoleAddress.roleName in inputEntryByRoleName)) {
33
+ return strategyState;
34
+ }
35
+ const nextInputEntryByRoleName = { ...inputEntryByRoleName };
36
+ delete nextInputEntryByRoleName[toolStepRoleAddress.roleName];
37
+ if (Object.keys(nextInputEntryByRoleName).length === 0) {
38
+ const nextStrategyState = { ...strategyState };
39
+ delete nextStrategyState[toolStepRoleAddress.toolStepKey];
40
+ return nextStrategyState;
41
+ }
42
+ return {
43
+ ...strategyState,
44
+ [toolStepRoleAddress.toolStepKey]: nextInputEntryByRoleName,
45
+ };
46
+ }
47
+ export function bindInputResource(strategyState, target, resource) {
48
+ const mutableInputResource = {
49
+ ...resource,
50
+ strategyStateInputKind: 'inputResource',
51
+ };
52
+ return setStrategyStateInputEntry(strategyState, target, mutableInputResource);
53
+ }
54
+ function getInputRoleValue(tool, roleName) {
55
+ return tool.roleSpec.inputRoleValueByName[roleName];
56
+ }
57
+ function getOutputRoleValue(tool, roleName) {
58
+ return tool.roleSpec.outputRoleValueByName[roleName];
59
+ }
60
+ export function bindInternalInputPotential(strategyState, targetAddress, sourceAddress, context) {
61
+ const sourceToolStep = context.toolStepByKey.get(sourceAddress.toolStepKey) ?? null;
62
+ if (!sourceToolStep) {
63
+ throw new Error(`Source tool step not found for '${sourceAddress.toolStepKey}'.`);
64
+ }
65
+ const targetToolStep = context.toolStepByKey.get(targetAddress.toolStepKey) ?? null;
66
+ if (!targetToolStep) {
67
+ throw new Error(`Target tool step not found for '${targetAddress.toolStepKey}'.`);
68
+ }
69
+ const sourceTool = context.toolMap.get(sourceToolStep.toolHandle) ?? null;
70
+ if (!sourceTool) {
71
+ throw new Error(`Source tool not found for '${sourceToolStep.toolHandle}'.`);
72
+ }
73
+ const targetTool = context.toolMap.get(targetToolStep.toolHandle) ?? null;
74
+ if (!targetTool) {
75
+ throw new Error(`Target tool not found for '${targetToolStep.toolHandle}'.`);
76
+ }
77
+ const targetInputRole = getInputRoleValue(targetTool, targetAddress.roleName);
78
+ if (!targetInputRole) {
79
+ throw new Error(`Target input role not found for (${targetAddress.toolStepKey}, ${targetAddress.roleName}).`);
80
+ }
81
+ const sourceOutputRole = getOutputRoleValue(sourceTool, sourceAddress.roleName);
82
+ const sourceInputRole = getInputRoleValue(sourceTool, sourceAddress.roleName);
83
+ const sourceInputEntryByRoleName = strategyState[sourceAddress.toolStepKey];
84
+ const sourceInputEntry = sourceInputEntryByRoleName?.[sourceAddress.roleName];
85
+ const sourceRoleType = sourceOutputRole
86
+ ? extractResourceTypeHandleFromRoleValue(sourceOutputRole)
87
+ : sourceInputRole
88
+ ? extractResourceTypeHandleFromRoleValue(sourceInputRole)
89
+ : null;
90
+ const targetRoleType = extractResourceTypeHandleFromRoleValue(targetInputRole);
91
+ if (!sourceOutputRole && sourceInputRole) {
92
+ if (!sourceInputEntry) {
93
+ throw new Error(`Source input role is not bound for (${sourceAddress.toolStepKey}, ${sourceAddress.roleName}).`); // ATTENTION: not an ontological invariant, but it might help catch some mistakes early on.
94
+ }
95
+ }
96
+ if (!sourceOutputRole && !sourceInputRole) {
97
+ throw new Error(`Source role not found for (${sourceAddress.toolStepKey}, ${sourceAddress.roleName}).`);
98
+ }
99
+ if (!sourceRoleType || !targetRoleType || sourceRoleType !== targetRoleType) {
100
+ throw new Error(`Reference type mismatch between source (${sourceAddress.toolStepKey}, ${sourceAddress.roleName}) and target (${targetAddress.toolStepKey}, ${targetAddress.roleName}).`);
101
+ }
102
+ return setStrategyStateInputEntry(strategyState, targetAddress, {
103
+ strategyStateInputKind: 'internalInputPotential',
104
+ toolStepRoleAddress: {
105
+ toolStepKey: sourceAddress.toolStepKey,
106
+ roleName: sourceAddress.roleName,
107
+ },
108
+ });
109
+ }
110
+ export function bindExternalInputPotential(strategyState, target) {
111
+ const mutableExternalInputPotential = {
112
+ strategyStateInputKind: 'externalInputPotential',
113
+ };
114
+ return setStrategyStateInputEntry(strategyState, target, mutableExternalInputPotential);
115
+ }
@@ -0,0 +1,11 @@
1
+ import type { ToolStepRoleAddress, ResourceId, Resource, ResourceTypeHandle, StrategyTraceHandle } from '@toolproof-core/genesis';
2
+ export type ResourceCreationDescriptor = {
3
+ id: ResourceId;
4
+ resourceTypeHandle: ResourceTypeHandle;
5
+ } | {
6
+ id: ResourceId;
7
+ resourceTypeHandle: ResourceTypeHandle;
8
+ toolStepRoleAddress: ToolStepRoleAddress;
9
+ strategyTraceHandle: StrategyTraceHandle;
10
+ };
11
+ export declare function createResourceFromDescriptor(descriptor: ResourceCreationDescriptor, projection: unknown): Resource;
@@ -0,0 +1,32 @@
1
+ import { CONSTANTS } from '../lookups/lookups.js';
2
+ function createStrategyProvenance(strategyTraceHandle, toolStepRoleAddress) {
3
+ return {
4
+ provenanceKind: CONSTANTS.Enums.ProvenanceKind.strategy,
5
+ strategyTraceHandle,
6
+ toolStepRoleAddress,
7
+ };
8
+ }
9
+ function createRuntimeProvenance() {
10
+ return {
11
+ provenanceKind: CONSTANTS.Enums.ProvenanceKind.runtime,
12
+ };
13
+ }
14
+ function createResourcePointer(id, resourceTypeHandle, provenance) {
15
+ return {
16
+ id,
17
+ resourceTypeHandle,
18
+ provenance,
19
+ };
20
+ }
21
+ function createResource(resourcePointer, projection) {
22
+ return {
23
+ ...resourcePointer,
24
+ projection,
25
+ };
26
+ }
27
+ export function createResourceFromDescriptor(descriptor, projection) {
28
+ const provenance = 'toolStepRoleAddress' in descriptor
29
+ ? createStrategyProvenance(descriptor.strategyTraceHandle, descriptor.toolStepRoleAddress)
30
+ : createRuntimeProvenance();
31
+ return createResource(createResourcePointer(descriptor.id, descriptor.resourceTypeHandle, provenance), projection);
32
+ }
@@ -0,0 +1,9 @@
1
+ import type { Tool } from '@toolproof-core/genesis';
2
+ import type { MutableToolStep, MutableCase, MutableWhileStep, MutableForStep, MutableBranchStep } from './mutableStrategyOverlay.js';
3
+ import { CONSTANTS } from '../lookups/lookups.js';
4
+ export declare function createToolStepFromTool(tool: Tool): MutableToolStep;
5
+ export declare function createCaseFromToolStepPair(what: MutableToolStep, when: MutableToolStep): MutableCase;
6
+ export declare function createLoopStepFromCase(stepCase: MutableCase, stepKind: typeof CONSTANTS.Enums.StepKind.for | typeof CONSTANTS.Enums.StepKind.while): MutableForStep | MutableWhileStep;
7
+ export declare function createBranchStepFromCases(cases: MutableCase[]): MutableBranchStep;
8
+ export declare function cloneForStep(forStep: MutableForStep): MutableForStep;
9
+ export declare function cloneWhileStep(whileStep: MutableWhileStep): MutableWhileStep;
@@ -0,0 +1,79 @@
1
+ import { CONSTANTS } from '../lookups/lookups.js';
2
+ import { getInputRoleNamesFromTool, getOutputRoleNamesFromTool } from './strategyExtraction.js';
3
+ import { generateIdentifier } from './identifierGeneration.js';
4
+ function assertNonEmpty(arr, msg) {
5
+ if (arr.length === 0) {
6
+ throw new Error(msg);
7
+ }
8
+ }
9
+ function getRoleBindingSpec(tool) {
10
+ return {
11
+ inputBindings: getInputRoleNamesFromTool(tool),
12
+ outputBindings: getOutputRoleNamesFromTool(tool),
13
+ };
14
+ }
15
+ export function createToolStepFromTool(tool) {
16
+ return {
17
+ toolStepKey: generateIdentifier('ToolStepKey'),
18
+ stepKind: CONSTANTS.Enums.StepKind.tool,
19
+ toolHandle: tool.handle,
20
+ roleBindingSpec: getRoleBindingSpec(tool),
21
+ };
22
+ }
23
+ export function createCaseFromToolStepPair(what, when) {
24
+ return { what, when };
25
+ }
26
+ export function createLoopStepFromCase(stepCase, stepKind) {
27
+ if (stepKind === CONSTANTS.Enums.StepKind.for) {
28
+ return {
29
+ macroStepKey: generateIdentifier('ForStepKey'),
30
+ stepKind: CONSTANTS.Enums.StepKind.for,
31
+ case: stepCase,
32
+ };
33
+ }
34
+ return {
35
+ macroStepKey: generateIdentifier('WhileStepKey'),
36
+ stepKind: CONSTANTS.Enums.StepKind.while,
37
+ case: stepCase,
38
+ };
39
+ }
40
+ export function createBranchStepFromCases(cases) {
41
+ assertNonEmpty(cases, 'createBranchStepFromCases requires at least one case');
42
+ return {
43
+ macroStepKey: generateIdentifier('BranchStepKey'),
44
+ stepKind: CONSTANTS.Enums.StepKind.branch,
45
+ cases,
46
+ };
47
+ }
48
+ export function cloneForStep(forStep) {
49
+ return {
50
+ macroStepKey: generateIdentifier('ForStepKey'),
51
+ stepKind: CONSTANTS.Enums.StepKind.for,
52
+ case: {
53
+ what: {
54
+ ...forStep.case.what,
55
+ toolStepKey: generateIdentifier('ToolStepKey'),
56
+ },
57
+ when: {
58
+ ...forStep.case.when,
59
+ toolStepKey: generateIdentifier('ToolStepKey'),
60
+ },
61
+ },
62
+ };
63
+ }
64
+ export function cloneWhileStep(whileStep) {
65
+ return {
66
+ macroStepKey: generateIdentifier('WhileStepKey'),
67
+ stepKind: CONSTANTS.Enums.StepKind.while,
68
+ case: {
69
+ what: {
70
+ ...whileStep.case.what,
71
+ toolStepKey: generateIdentifier('ToolStepKey'),
72
+ },
73
+ when: {
74
+ ...whileStep.case.when,
75
+ toolStepKey: generateIdentifier('ToolStepKey'),
76
+ },
77
+ },
78
+ };
79
+ }
@@ -0,0 +1,2 @@
1
+ import type { MutableStep, MutableStrategyState, MutableToolStepKey } from './mutableStrategyOverlay.js';
2
+ export declare function getIndependentThreads<TKey extends string = MutableToolStepKey, TStep extends MutableStep<TKey> = MutableStep<TKey>>(steps: TStep[], strategyState: MutableStrategyState<TKey>): TStep[][];