ph-cmd 6.0.0-dev.14 → 6.0.0-dev.16

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 (2) hide show
  1. package/build/cli.js +28 -394
  2. package/package.json +3 -3
package/build/cli.js CHANGED
@@ -658661,7 +658661,7 @@ var exports_version = {};
658661
658661
  __export(exports_version, {
658662
658662
  version: () => version2
658663
658663
  });
658664
- var version2 = "6.0.0-dev.13";
658664
+ var version2 = "6.0.0-dev.15";
658665
658665
 
658666
658666
  // ../../node_modules/.pnpm/didyoumean@1.2.2/node_modules/didyoumean/didYouMean-1.2.1.js
658667
658667
  var require_didYouMean_1_2_1 = __commonJS((exports, module3) => {
@@ -664654,413 +664654,47 @@ throw new MissingIdError("message");
664654
664654
  - **InvalidInputError**: Business logic violations
664655
664655
  - **PermissionDeniedError**: Access control violations
664656
664656
 
664657
- ## Document Model Structure
664658
-
664659
- ### Core Components
664660
-
664661
- - **Basic Metadata**: \`id\`, \`name\`, \`extension\`, \`description\`, \`author\` (name + website)
664662
- - **Specifications**: Versioned specs with \`version\`, \`changeLog\`, \`state\` (global/local with schema, initialValue, examples)
664663
- - **Modules**: Operational modules containing their operations
664664
-
664665
- ## Available Document Model Operations (37 total)
664666
-
664667
- | Category | Operations | Count |
664668
- | -------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----- |
664669
- | **Header Management** | \`SET_MODEL_NAME\`, \`SET_MODEL_ID\`, \`SET_MODEL_EXTENSION\`, \`SET_MODEL_DESCRIPTION\`, \`SET_AUTHOR_NAME\`, \`SET_AUTHOR_WEBSITE\` | 6 |
664670
- | **Versioning** | ⚠️ **DO NOT USE** - Not implemented | 0 |
664671
- | **Module Management** | \`ADD_MODULE\`, \`SET_MODULE_NAME\`, \`SET_MODULE_DESCRIPTION\`, \`DELETE_MODULE\`, \`REORDER_MODULES\` | 5 |
664672
- | **Operation Management** | \`ADD_OPERATION\`, \`SET_OPERATION_NAME\`, \`SET_OPERATION_SCHEMA\`, \`SET_OPERATION_DESCRIPTION\`, \`SET_OPERATION_TEMPLATE\`, \`SET_OPERATION_REDUCER\`, \`MOVE_OPERATION\`, \`DELETE_OPERATION\`, \`REORDER_MODULE_OPERATIONS\` | 9 |
664673
- | **Operation Error Management** | \`ADD_OPERATION_ERROR\`, \`SET_OPERATION_ERROR_CODE\`, \`SET_OPERATION_ERROR_NAME\`, \`SET_OPERATION_ERROR_DESCRIPTION\`, \`SET_OPERATION_ERROR_TEMPLATE\`, \`DELETE_OPERATION_ERROR\`, \`REORDER_OPERATION_ERRORS\` | 7 |
664674
- | **Operation Example Management** | \`ADD_OPERATION_EXAMPLE\`, \`UPDATE_OPERATION_EXAMPLE\`, \`DELETE_OPERATION_EXAMPLE\`, \`REORDER_OPERATION_EXAMPLES\` | 4 |
664675
- | **State Management** | \`SET_STATE_SCHEMA\`, \`SET_INITIAL_STATE\`, \`ADD_STATE_EXAMPLE\`, \`UPDATE_STATE_EXAMPLE\`, \`DELETE_STATE_EXAMPLE\`, \`REORDER_STATE_EXAMPLES\` | 6 |
664676
-
664677
- ## Best Practices & Design Principles
664678
-
664679
- ### Scope Selection
664680
-
664681
- - **\`scope: "global"\`**: State shared among all users with document access
664682
- - **\`scope: "local"\`**: State private to each individual user
664683
-
664684
- ### Operation Design
664685
-
664686
- - Use descriptive operation names (e.g., \`ADD_LINE_ITEM\`, \`UPDATE_RECIPIENT\`)
664687
- - One operation per user intent (separate concerns)
664688
- - Include comprehensive examples and error definitions
664689
- - Organize related operations into logical modules
664690
-
664691
- ## GraphQL Schema Guidelines
664692
-
664693
- ### Document State Schema
664694
-
664695
- - **Most fields optional** to support creating empty documents
664696
- - Use required fields \`!\` only when absolutely necessary
664697
- - Defaults handled by operations, not schema
664698
-
664699
- ### ⚠️ CRITICAL: State Type Naming Convention
664700
-
664701
- **MANDATORY**: The global state type name MUST follow this exact pattern:
664702
-
664703
- ~~~graphql
664704
- type <DocumentModelName>State {
664705
- # your fields here
664706
- }
664707
- ~~~
664708
-
664709
- **DO NOT** append "Global" to the state type name, even when defining global state:
664710
-
664711
- ~~~graphql
664712
- // ❌ WRONG - Do not use "GlobalState" suffix
664713
- type TodoListGlobalState {
664714
- todos: [Todo!]!
664715
- }
664716
-
664717
- // ✅ CORRECT - Use only "State" suffix
664718
- type TodoListState {
664719
- todos: [Todo!]!
664720
- }
664721
-
664722
- // ✅ CORRECT - Use "LocalState" suffix for Local scope
664723
- type TodoListLocalState {
664724
- localTodos: [Todo!]!
664725
- }
664726
- ~~~
664727
-
664728
- **Why this matters:**
664729
-
664730
- - The code generator expects the type to be named \`<DocumentModelName>State\`
664731
- - Using \`GlobalState\` or \`LocalState\` suffix will cause TypeScript compilation errors
664732
- - This applies when using \`SET_STATE_SCHEMA\` with \`scope: "global"\`
664733
-
664734
- **Rule**: For global state, the type should be \`<DocumentModelName>State\`. For local state (if needed), the type name should be \`<DocumentModelName>LocalState\`.
664735
-
664736
- ### Available Scalar Types
664737
-
664738
- | Standard | Custom Identity | Custom Amounts | Custom Specialized |
664739
- | --------- | ---------------------- | ------------------- | ------------------ |
664740
- | \`String\` | \`OID\` (Object ID) | \`Amount\` | \`EthereumAddress\` |
664741
- | \`Int\` | \`PHID\` (Powerhouse ID) | \`Amount_Tokens\` | \`EmailAddress\` |
664742
- | \`Float\` | \`OLabel\` | \`Amount_Money\` | \`Date\` |
664743
- | \`Boolean\` | | \`Amount_Fiat\` | \`DateTime\` |
664744
- | | | \`Amount_Currency\` | \`URL\` |
664745
- | | | \`Amount_Crypto\` | \`Currency\` |
664746
- | | | \`Amount_Percentage\` | |
664747
-
664748
- ### Arrays and Objects
664749
-
664750
- - **Arrays**: Must be mandatory \`[ObjectType!]!\`
664751
- - **Objects in arrays**: Must include \`OID!\` field for unique identification
664752
- - Include \`OLabel\` for metadata when relevant
664753
-
664754
- ### Input Types
664755
-
664756
- - Reflect user intent with descriptive names
664757
- - Simple, specific fields over complex nested types
664758
- - System auto-generates \`OID\` for new objects (users don't provide manually)
664759
-
664760
- ## Working with Drives
664761
-
664762
- **MANDATORY**: Check the document-drive schema before performing drive operations.
664763
-
664764
- ### Drive Types
664765
-
664766
- There might be two drives available with a special use case:
664767
-
664768
- 1. **Vetra Drive** (\`vetra-{hash}\`):
664769
- - Contains **source documents**: document models and document editors
664770
- - Used for development
664771
- - Add document model and editor definitions here
664772
-
664773
- 2. **Preview Drive** (\`preview-{hash}\`, named "Vetra Preview"):
664774
- - Contains **demo and preview documents** (document instances)
664775
- - Used for showcasing and testing document models
664776
- - Add actual document instances here
664777
-
664778
- ### Drive Operations
664779
-
664780
- When working with drives (adding/removing documents, creating folders, etc.):
664781
-
664782
- 1. **Always get the drive schema first**:
664783
-
664784
- ~~~typescript
664785
- mcp__reactor -
664786
- mcp__getDocumentModelSchema({ type: "powerhouse/document-drive" });
664787
- ~~~
664788
-
664789
- 2. **Review available operations** in the schema, such as:
664790
- - \`ADD_FILE\` - Add a document to the drive
664791
- - \`ADD_FOLDER\` - Create a new folder
664792
- - \`DELETE_NODE\` - Remove a file or folder (use this, NOT "DELETE_FILE")
664793
- - \`UPDATE_NODE\` - Update node properties
664794
- - \`MOVE_NODE\` - Move a node to different location
664795
-
664796
- 3. **Check input schemas** for each operation to ensure you're passing correct parameters
664797
- `.raw;
664798
- // ../../packages/codegen/dist/src/templates/boilerplate/CLAUDE.md.js
664799
- var claudeTemplate = md`
664800
- # Powerhouse Document Models Assistant
664801
-
664802
- This project creates document models, editors, processors and subgraphs for the Powerhouse ecosystem. Your role is to help users create these modules based on their needs.
664803
-
664804
- ## Core Concepts
664805
-
664806
- - **Document Model**: A template for creating documents. Defines schema and allowed operations for a document type.
664807
- - **Document**: An instance of a document model containing actual data that follows the model's structure and can be modified using operations.
664808
- - **Drive**: A document of type "powerhouse/document-drive" representing a collection of documents and folders. Add documents using "addActions" with "ADD_FILE" action.
664809
- - **Action**: A proposed change to a document (JSON object with action name and input). Dispatch using "addActions" tool.
664810
- - **Operation**: A completed change to a document containing the action plus metadata (index, timestamp, hash, errors). Actions become operations after dispatch.
664811
-
664812
- ## CRITICAL: MCP Tool Usage Rules
664813
-
664814
- **MANDATORY**: The \`reactor-mcp\` MUST BE USED when handling documents or document-models for the Powerhouse/Vetra ecosystem.
664815
- If the \`reactor-mcp\` server is unavailable, ask the user to run \`ph vetra\` on a separate terminal to start the server and try to reconnect to the MCP server, DO NOT run it yourself.
664816
-
664817
- ### Key Requirements:
664818
-
664819
- - Never set document IDs manually - they're auto-generated by 'createDocument'
664820
- - Minimize "addActions" calls by batching multiple actions together
664821
- - Add new document model documents to "vetra-{hash}" drive unless specified otherwise
664822
- - Always check document model schema before calling addActions
664823
- - Use MCP tools for ALL document and document-model operations
664824
-
664825
- ## Document Model Creation Workflow
664826
-
664827
- ### 1. Planning Phase
664828
-
664829
- **MANDATORY**: Present your proposal to the user and ask for confirmation before implementing ANY document model.
664830
-
664831
- - **ALWAYS** describe the proposed document model structure (state schema, operations, modules) before creating
664832
- - **NEVER** proceed with implementation without explicit user approval of your proposal
664833
- - When in doubt, ask for clarification
664834
- - Break complex models into logical modules and operations
664835
-
664836
- ### 2. Pre-Implementation Requirements
664837
-
664838
- **MANDATORY**: Check document model schema before making any MCP tool calls.
664839
-
664840
- - **ALWAYS** use \`mcp__reactor-mcp__getDocumentModelSchema\` with \`type: "powerhouse/document-model"\` first
664841
- - Review input schema requirements for operations like \`ADD_MODULE\`, \`ADD_OPERATION\`, etc.
664842
- - Ensure all required parameters (like \`id\` or \`scope\` fields) are included in action inputs
664843
- - This prevents failed tool calls and reduces iteration
664844
-
664845
- ### 3. Implementation Requirements
664846
-
664847
- - Document model reducers must be **pure synchronous functions**
664848
- - Reducers receive current state and operation, always returning the same result
664849
- - Values like dates/IDs must come from operation input, not generated in reducer
664850
- - Reducer code goes into SET_OPERATION_REDUCER action (no function header needed)
664851
- - Reducers are wrapped with Mutative - you can mutate the state object directly
664852
- - External imports go at the beginning of the actual reducer file in \`src/\`
664853
- - Ensure that the reducer code of each operation in the document model schema is applied in \`document-models/<document-model-name>/src/reducers/<module-name>.ts\`
664854
-
664855
- ### 4. Quality assurance
664856
-
664857
- After doing changes to the code, or after creating a new document model or a new editor, _YOU MUST RUN_ the following commands to check for errors in your implementation:
664858
-
664859
- - **TypeScript Check**: Run \`npm run tsc\` to validate type safety
664860
- - **ESLint Check**: Run \`npm run lint:fix\` to check for errors with ESLint
664861
-
664862
- ## Document editor creation flow
664863
-
664864
- When the user requests to create or make changes on a document editor, follow these steps:
664865
-
664866
- - Check if the document editor already exists and if it does, ask the user if a new one should be created or if the existing one should be reimplemented
664867
- - If it's a new editor, create a new editor document on the "vetra-{hash}" drive if available, of type \`powerhouse/document-editor\`
664868
- - Check the document editor schema and comply with it
664869
- - After adding the editor document to the \`vetra-{hash}\` drive, a new editor will be generated in the \`editors\` folder
664870
- - Inspect the hooks in \`editors/hooks\` as they should be useful
664871
- - Read the schema of the document model that the editor is for to know how to interact with it
664872
- - Style the editor using tailwind classes or a style tag. If using a style tag, make sure to make the selectors specific to only apply to the editor component.
664873
- - Create modular components for the UI elements and place them on separate files to make it easier to maintain and update
664874
- - Consider using the React Components exported by \`@powerhousedao/design-system\` and \`@powerhousedao/document-engineering\`
664875
- - Separate business logic from presentation logic
664876
- - Use TypeScript for type safety, avoid using any and type casting
664877
- - Always check for type and lint errors after creating or modifying the editor
664878
-
664879
- ### Document Editor Implementation Pattern
664880
-
664881
- **CRITICAL**: When implementing document editors, use the modern React hooks pattern from \`@powerhousedao/reactor-browser\`.
664882
-
664883
- The following section is valid for editors that edit a single document type.
664884
-
664885
- #### Required Imports and Setup
664886
-
664887
- Using a "Todo" document model as example:
664888
-
664889
- ~~~typescript
664890
- import { generateId } from "document-model/core";
664891
- import { useSelectedTodoDocument } from "../hooks/useTodoDocument.js";
664892
- import {
664893
- addTodo,
664894
- } from "../../document-models/todo/gen/creators.js";
664895
-
664896
- export default function Editor() {
664897
- const [document, dispatch] = useSelectedTodoDocument();
664898
-
664899
- function handleAddTodo(values: { title: string }) {
664900
- if (values.title) {
664901
- dispatch(addTodo({ id: generateId(), title: values.title }));
664902
- }
664903
- };
664904
- ~~~
664905
-
664906
- The \`useSelectedTodoDocument\` gets generated automatically so you don't need to implement it yourself.
664907
-
664908
- ## ⚠️ CRITICAL: Generated Files & Modification Rules
664909
-
664910
- ### Generated Files Rule
664911
-
664912
- **NEVER edit files in \`gen/\` folders** - they are auto-generated and will be overwritten.
664913
-
664914
- ### Document Model Modification Process
664915
-
664916
- For ANY document model changes, follow this **mandatory** two-step process:
664917
-
664918
- #### Step 1: Update Document Model via MCP
664919
-
664920
- Use \`mcp__reactor-mcp__addActions\` with operations like:
664921
-
664922
- - \`SET_OPERATION_SCHEMA\` - update input/output schemas
664923
- - \`SET_OPERATION_REDUCER\` - update reducer code
664924
- - \`SET_STATE_SCHEMA\` - update state definitions
664925
-
664926
- #### Step 2: Update Existing Source Files
664927
-
664928
- **ALSO manually update existing reducer files in \`src/\` folder** - these are NOT auto-generated.
664929
- Make sure to check if the operation reducer code needs to be updated after changing the state schema.
664930
-
664931
- ### ⚠️ Critical Reminder
664932
-
664933
- **ALWAYS do BOTH steps when fixing reducer issues:**
664934
-
664935
- 1. ✅ Fix existing reducer files in \`src/\` manually
664936
- 2. ✅ Update document model via MCP with same fixes
664937
-
664938
- **Forgetting step 2 means future code generations will still contain the bugs!**
664939
-
664940
- ## Reducer Implementation Guidelines
664941
-
664942
- ### ❌ Forbidden in Reducers (Non-Deterministic)
664943
-
664944
- - \`crypto.randomUUID()\`, \`Math.random()\`, \`Date.now()\`, \`new Date()\`
664945
- - External API calls or side effects
664946
- - Asynchronous functions
664947
- - Any non-deterministic functions
664948
-
664949
- ### ❌ Forbidden Patterns
664950
-
664951
- ~~~typescript
664952
- // NEVER use fallback values with non-deterministic functions
664953
- id: action.input.id || crypto.randomUUID(); // ❌ FORBIDDEN
664954
- timestamp: action.input.timestamp || new Date(); // ❌ FORBIDDEN
664955
- ~~~
664956
-
664957
- ### ✅ Required Pattern
664958
-
664959
- All dynamic values must come from action input:
664960
-
664961
- - **IDs**: Include \`id: OID!\` in input schema, use \`action.input.id\` in reducer
664962
- - **Timestamps**: Include \`timestamp: DateTime!\` in input schema
664963
- - **Computed values**: Calculate before dispatching action
664964
-
664965
- ### Example
664966
-
664967
- ~~~typescript
664968
- // ❌ BAD - impure reducer
664969
- const newItem = {
664970
- id: crypto.randomUUID(), // Non-deterministic
664971
- createdAt: new Date(), // Non-deterministic
664972
- };
664973
-
664974
- // ✅ GOOD - pure reducer
664975
- const newItem = {
664976
- id: action.input.id, // From action input
664977
- createdAt: action.input.createdAt, // From action input
664978
- };
664979
- ~~~
664980
-
664981
- ### Handling Nullable Input Types
664982
-
664983
- **CRITICAL**: Be careful when handling optional input types:
664984
-
664985
- - Optional input types use \`InputMaybe<T>\` allowing \`null | undefined | T\`.
664986
- - Optional state types use \`Maybe<T>\` = \`T | null\`.
664987
- - If there is no applicable default value then use \`|| null\`.
664988
-
664989
- ~~~typescript
664990
- // ❌ BAD - Type error with Maybe<string>
664991
- amount: action.input.amount,
664992
- notes: action.input.notes,
664993
-
664994
- // ✅ GOOD - Matches Maybe<T> = T | null
664995
- amount: action.input.amount || null,
664996
- notes: action.input.notes || [],
664997
- ~~~
664998
-
664999
- Use truthy checks when conditionally assigning optional values from input to state:
665000
-
665001
- ~~~typescript
665002
- // ❌ BAD - Type 'string | null' is not assignable to type 'string'.
665003
- if (action.input.field !== undefined) entry.field = action.input.field;
664657
+ #### Testing Reducer Errors
665004
664658
 
665005
- // GOOD - use truthy checks
665006
- if (action.input.field) state.field = action.input.field;
664659
+ **CRITICAL**: When a reducer throws an error, the operation is **still added** to the document but with an \`.error\` property containing the error message as a string.
665007
664660
 
665008
- // GOOD - For booleans use explicit null/undefined checks
665009
- if (action.input.field !== undefined && action.input.field !== null)
665010
- state.field = action.input.field;
665011
- ~~~
664661
+ **DO NOT** use \`.toThrow()\` or \`expect(() => ...).toThrow()\` patterns when testing reducer errors.
665012
664662
 
665013
- ### Error Handling in Operations
664663
+ ##### How Errors Work in Operations
665014
664664
 
665015
- **MANDATORY**: Define specific error types for each operation to handle invalid inputs and edge cases properly.
665016
- Action inputs are validated so they are guaranteed to respect the input schema.
665017
- Errors referenced in the reducer code will be imported automatically.
664665
+ 1. The reducer throws an error (e.g., \`throw new InvalidNameError("message")\`)
664666
+ 2. The operation is still recorded in \`document.operations.global\` (or \`.local\`)
664667
+ 3. The error message is stored in \`operation.error\` as a string
664668
+ 4. **The state is NOT mutated** - it remains unchanged from before the operation
665018
664669
 
665019
- #### Error Definition Requirements
664670
+ ##### Accessing the Correct Operation Index
665020
664671
 
665021
- 1. **Add error definitions** to operations using \`ADD_OPERATION_ERROR\`:
665022
- - \`code\`: Uppercase snake_case (e.g., \`"MISSING_ID"\`, \`"ENTRY_NOT_FOUND"\`)
665023
- - \`name\`: PascalCase ending with "Error" (e.g., \`"MissingIdError"\`, \`"EntryNotFoundError"\`)
665024
- - \`description\`: Human-readable description of the error condition
665025
-
665026
- 2. **Error names must end with "Error"** for consistency and code generation
664672
+ **CRITICAL**: You must access the correct operation index. The index corresponds to how many operations were dispatched before it.
665027
664673
 
665028
- 3. **Use specific error types** rather than generic validation
665029
-
665030
- 4. **Must use unique error names and ids**
664674
+ - If this is the **first** operation dispatched, access \`[0]\`
664675
+ - If 3 operations were dispatched **before** the failing one, access \`[3]\`
665031
664676
 
665032
- #### Error Usage in Reducers
664677
+ ##### Example
665033
664678
 
665034
664679
  ~~~typescript
665035
- // GOOD - Throw specific errors by name
665036
- if (!action.input.id) {
665037
- throw new MissingIdError("ID is required for operation");
665038
- }
665039
-
665040
- if (entryIndex === -1) {
665041
- throw new EntryNotFoundError(\`Entry not found\`);
665042
- }
664680
+ it("should return error and not mutate state", () => {
664681
+ const document = utils.createDocument();
664682
+ const initialState = document.state.global.name;
665043
664683
 
665044
- // BAD - Generic Error
665045
- throw new Error("Something went wrong");
665046
-
665047
- // ❌ BAD - Nested error access
665048
- throw new errors.ModuleName.MissingIdError("message");
664684
+ const updatedDocument = reducer(document, setName({ name: "invalid" }));
665049
664685
 
665050
- // BAD - Do not import error classes in the reducer code,
665051
- import { MissingIdError } from "../../gen/module-name/error.js";
664686
+ // Access the correct operation index (0 = first operation)
664687
+ expect(updatedDocument.operations.global[0].error).toBe(
664688
+ "Name is not allowed",
664689
+ );
664690
+ // State remains unchanged
664691
+ expect(updatedDocument.state.global.name).toBe(initialState);
664692
+ });
665052
664693
 
665053
- // GOOD - Simply reference the error and it will be imported automatically
665054
- throw new MissingIdError("message");
664694
+ // WRONG - Never use toThrow()
664695
+ expect(() => reducer(document, setName({ name: "invalid" }))).toThrow();
665055
664696
  ~~~
665056
664697
 
665057
- #### Common Error Patterns
665058
-
665059
- - **EntityNotFoundError**: Referenced entity doesn't exist
665060
- - **DuplicateIdError**: ID already exists when creating new entries
665061
- - **InvalidInputError**: Business logic violations
665062
- - **PermissionDeniedError**: Access control violations
665063
-
665064
664698
  ## Document Model Structure
665065
664699
 
665066
664700
  ### Core Components
@@ -693303,7 +692937,7 @@ async function writeModuleFiles() {
693303
692937
  await writeFileEnsuringDir("subgraphs/index.ts", subgraphsIndexTemplate);
693304
692938
  }
693305
692939
  async function writeAiConfigFiles() {
693306
- await writeFileEnsuringDir("CLAUDE.md", claudeTemplate);
692940
+ await writeFileEnsuringDir("CLAUDE.md", agentsTemplate);
693307
692941
  await writeFileEnsuringDir("AGENTS.md", agentsTemplate);
693308
692942
  await writeFileEnsuringDir(".mcp.json", mcpTemplate);
693309
692943
  await writeFileEnsuringDir(".gemini/settings.json", geminiSettingsTemplate);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ph-cmd",
3
- "version": "6.0.0-dev.14",
3
+ "version": "6.0.0-dev.16",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0-only",
6
6
  "type": "module",
@@ -29,8 +29,8 @@
29
29
  "read-pkg": "^9.0.1",
30
30
  "write-package": "^7.2.0",
31
31
  "vitest": "^3.2.4",
32
- "@powerhousedao/codegen": "6.0.0-dev.14",
33
- "@powerhousedao/common": "6.0.0-dev.14"
32
+ "@powerhousedao/codegen": "6.0.0-dev.16",
33
+ "@powerhousedao/common": "6.0.0-dev.16"
34
34
  },
35
35
  "scripts": {
36
36
  "tsc": "tsc",