@shrkcrft/plugin-api 0.1.0-alpha.8 → 0.1.0-alpha.9

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/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  SharkCraft plugin API: extension points for commands, knowledge, templates, MCP tools.
4
4
 
5
- Part of [SharkCraft](https://github.com/shrkcrft/sharkcraft) — a deterministic, local-first toolkit that gives AI coding agents durable project context. See the main repo for documentation, examples, and the `shrk` CLI.
5
+ Part of [SharkCraft](https://github.com/sharkcraft/sharkcraft) — a deterministic, local-first toolkit that gives AI coding agents durable project context. See the main repo for documentation, examples, and the `shrk` CLI.
6
6
 
7
7
  ## Install
8
8
 
package/dist/index.d.ts CHANGED
@@ -12,6 +12,7 @@ export * from './construct.js';
12
12
  export * from './playbook.js';
13
13
  export * from './policy-check.js';
14
14
  export * from './search-tuning.js';
15
+ export * from './plugin-lifecycle-profile.js';
15
16
  export * from './convention.js';
16
17
  export * from './pack-helper.js';
17
18
  export * from './task-routing-hint.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ export * from "./construct.js";
12
12
  export * from "./playbook.js";
13
13
  export * from "./policy-check.js";
14
14
  export * from "./search-tuning.js";
15
+ export * from "./plugin-lifecycle-profile.js";
15
16
  export * from "./convention.js";
16
17
  export * from "./pack-helper.js";
17
18
  export * from "./task-routing-hint.js";
@@ -64,6 +64,8 @@ export interface ISharkCraftPackContributions {
64
64
  decisionFiles?: readonly string[];
65
65
  /** Pack-extensible path conventions when separate from `pathFiles`. */
66
66
  pathConventionFiles?: readonly string[];
67
+ /** Pack-contributed plugin lifecycle profiles. Files default-export `readonly IPluginLifecycleProfile[]`. */
68
+ pluginLifecycleProfileFiles?: readonly string[];
67
69
  /** Pack-contributed agent-contract templates. Files default-export `readonly IAgentContractTemplate[]`. */
68
70
  contractTemplateFiles?: readonly string[];
69
71
  /** Pack-contributed migration readiness profiles. */
@@ -1 +1 @@
1
- {"version":3,"file":"pack-manifest.d.ts","sourceRoot":"","sources":["../src/pack-manifest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pack-manifest.d.ts","sourceRoot":"","sources":["../src/pack-manifest.ts"],"names":[],"mappings":"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"}
@@ -66,6 +66,7 @@ export function validatePackManifest(value) {
66
66
  'feedbackRuleFiles',
67
67
  'decisionFiles',
68
68
  'pathConventionFiles',
69
+ 'pluginLifecycleProfileFiles',
69
70
  'contractTemplateFiles',
70
71
  'migrationProfileFiles',
71
72
  'conventionFiles',
@@ -0,0 +1,98 @@
1
+ /**
2
+ * Plugin lifecycle profile (generic).
3
+ *
4
+ * A pack can contribute one or more lifecycle profiles describing where its
5
+ * plugins live, what their barrels and key-tables look like, and which
6
+ * registry files participate. The engine reads these profiles and plans
7
+ * plugin rename / remove operations against them.
8
+ *
9
+ * The engine never embeds project-specific plugin layouts; all of that comes
10
+ * from a profile. Pack contributions are static data — no executable code.
11
+ */
12
+ export declare enum PluginLifecycleRootKind {
13
+ Api = "api",
14
+ Cross = "cross",
15
+ Ui = "ui",
16
+ Angular = "angular",
17
+ React = "react",
18
+ Node = "node",
19
+ Runtime = "runtime",
20
+ Other = "other"
21
+ }
22
+ export interface IPluginLifecycleRoot {
23
+ readonly id: string;
24
+ readonly path: string;
25
+ readonly kind?: PluginLifecycleRootKind;
26
+ readonly pluginFolderSegment?: string;
27
+ }
28
+ export declare enum BarrelSort {
29
+ Alphabetical = "alphabetical",
30
+ Preserve = "preserve",
31
+ Append = "append"
32
+ }
33
+ export interface IPluginLifecycleBarrel {
34
+ readonly id: string;
35
+ readonly path: string;
36
+ readonly exportSegment?: string;
37
+ readonly sort?: BarrelSort;
38
+ }
39
+ export declare enum CaseStyle {
40
+ UpperSnake = "upperSnake",
41
+ Pascal = "pascal",
42
+ Camel = "camel",
43
+ Kebab = "kebab"
44
+ }
45
+ export interface IPluginLifecycleKeyTable {
46
+ readonly path: string;
47
+ readonly keyCase: CaseStyle;
48
+ readonly valueCase: CaseStyle;
49
+ readonly entryAnchor?: string;
50
+ readonly id?: string;
51
+ }
52
+ export declare enum PluginRegistryFileKind {
53
+ PluginKey = "plugin-key",
54
+ UserPluginEntry = "user-plugin-entry",
55
+ Defaults = "defaults",
56
+ Event = "event",
57
+ Command = "command",
58
+ Composer = "composer",
59
+ Other = "other"
60
+ }
61
+ export interface IPluginLifecycleRegistryFile {
62
+ readonly id: string;
63
+ readonly path: string;
64
+ readonly kind: PluginRegistryFileKind;
65
+ readonly entryPattern?: string;
66
+ }
67
+ export interface IPluginLifecycleNaming {
68
+ readonly pluginIdCase?: CaseStyle;
69
+ readonly classNameSuffix?: string;
70
+ }
71
+ export interface IPluginLifecycleProfile {
72
+ readonly id: string;
73
+ readonly title: string;
74
+ readonly description?: string;
75
+ readonly pluginRoots: readonly IPluginLifecycleRoot[];
76
+ readonly barrels?: readonly IPluginLifecycleBarrel[];
77
+ readonly keyTable?: IPluginLifecycleKeyTable;
78
+ readonly registryFiles?: readonly IPluginLifecycleRegistryFile[];
79
+ readonly naming?: IPluginLifecycleNaming;
80
+ readonly validationCommands?: readonly string[];
81
+ readonly safetyNotes?: readonly string[];
82
+ readonly appliesWhen?: readonly string[];
83
+ readonly tags?: readonly string[];
84
+ }
85
+ export interface IPluginLifecycleProfileValidationIssue {
86
+ readonly field: string;
87
+ readonly message: string;
88
+ }
89
+ export interface IPluginLifecycleProfileValidationResult {
90
+ readonly valid: boolean;
91
+ readonly issues: readonly IPluginLifecycleProfileValidationIssue[];
92
+ }
93
+ /**
94
+ * Validate a plugin lifecycle profile shape. Lightweight runtime check; no
95
+ * dependency on zod (plugin-api stays dependency-light, like pack-manifest).
96
+ */
97
+ export declare function validatePluginLifecycleProfile(value: unknown): IPluginLifecycleProfileValidationResult;
98
+ //# sourceMappingURL=plugin-lifecycle-profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-lifecycle-profile.d.ts","sourceRoot":"","sources":["../src/plugin-lifecycle-profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Plugin lifecycle profile (generic).
3
+ *
4
+ * A pack can contribute one or more lifecycle profiles describing where its
5
+ * plugins live, what their barrels and key-tables look like, and which
6
+ * registry files participate. The engine reads these profiles and plans
7
+ * plugin rename / remove operations against them.
8
+ *
9
+ * The engine never embeds project-specific plugin layouts; all of that comes
10
+ * from a profile. Pack contributions are static data — no executable code.
11
+ */
12
+ export var PluginLifecycleRootKind;
13
+ (function (PluginLifecycleRootKind) {
14
+ PluginLifecycleRootKind["Api"] = "api";
15
+ PluginLifecycleRootKind["Cross"] = "cross";
16
+ PluginLifecycleRootKind["Ui"] = "ui";
17
+ PluginLifecycleRootKind["Angular"] = "angular";
18
+ PluginLifecycleRootKind["React"] = "react";
19
+ PluginLifecycleRootKind["Node"] = "node";
20
+ PluginLifecycleRootKind["Runtime"] = "runtime";
21
+ PluginLifecycleRootKind["Other"] = "other";
22
+ })(PluginLifecycleRootKind || (PluginLifecycleRootKind = {}));
23
+ export var BarrelSort;
24
+ (function (BarrelSort) {
25
+ BarrelSort["Alphabetical"] = "alphabetical";
26
+ BarrelSort["Preserve"] = "preserve";
27
+ BarrelSort["Append"] = "append";
28
+ })(BarrelSort || (BarrelSort = {}));
29
+ export var CaseStyle;
30
+ (function (CaseStyle) {
31
+ CaseStyle["UpperSnake"] = "upperSnake";
32
+ CaseStyle["Pascal"] = "pascal";
33
+ CaseStyle["Camel"] = "camel";
34
+ CaseStyle["Kebab"] = "kebab";
35
+ })(CaseStyle || (CaseStyle = {}));
36
+ export var PluginRegistryFileKind;
37
+ (function (PluginRegistryFileKind) {
38
+ PluginRegistryFileKind["PluginKey"] = "plugin-key";
39
+ PluginRegistryFileKind["UserPluginEntry"] = "user-plugin-entry";
40
+ PluginRegistryFileKind["Defaults"] = "defaults";
41
+ PluginRegistryFileKind["Event"] = "event";
42
+ PluginRegistryFileKind["Command"] = "command";
43
+ PluginRegistryFileKind["Composer"] = "composer";
44
+ PluginRegistryFileKind["Other"] = "other";
45
+ })(PluginRegistryFileKind || (PluginRegistryFileKind = {}));
46
+ /**
47
+ * Validate a plugin lifecycle profile shape. Lightweight runtime check; no
48
+ * dependency on zod (plugin-api stays dependency-light, like pack-manifest).
49
+ */
50
+ export function validatePluginLifecycleProfile(value) {
51
+ const issues = [];
52
+ if (!value || typeof value !== 'object') {
53
+ return { valid: false, issues: [{ field: '<root>', message: 'profile must be an object' }] };
54
+ }
55
+ const obj = value;
56
+ if (typeof obj.id !== 'string' || obj.id.length === 0) {
57
+ issues.push({ field: 'id', message: 'id must be a non-empty string' });
58
+ }
59
+ if (typeof obj.title !== 'string' || obj.title.length === 0) {
60
+ issues.push({ field: 'title', message: 'title must be a non-empty string' });
61
+ }
62
+ if (!Array.isArray(obj.pluginRoots) || obj.pluginRoots.length === 0) {
63
+ issues.push({ field: 'pluginRoots', message: 'pluginRoots must be a non-empty array' });
64
+ }
65
+ else {
66
+ obj.pluginRoots.forEach((root, idx) => {
67
+ if (!root || typeof root !== 'object') {
68
+ issues.push({ field: `pluginRoots[${idx}]`, message: 'root must be an object' });
69
+ return;
70
+ }
71
+ const r = root;
72
+ if (typeof r.id !== 'string' || r.id.length === 0) {
73
+ issues.push({ field: `pluginRoots[${idx}].id`, message: 'id required' });
74
+ }
75
+ if (typeof r.path !== 'string' || r.path.length === 0) {
76
+ issues.push({ field: `pluginRoots[${idx}].path`, message: 'path required' });
77
+ }
78
+ });
79
+ }
80
+ if (obj.barrels !== undefined) {
81
+ if (!Array.isArray(obj.barrels)) {
82
+ issues.push({ field: 'barrels', message: 'barrels must be an array' });
83
+ }
84
+ else {
85
+ obj.barrels.forEach((b, idx) => {
86
+ if (!b || typeof b !== 'object') {
87
+ issues.push({ field: `barrels[${idx}]`, message: 'barrel must be an object' });
88
+ return;
89
+ }
90
+ const br = b;
91
+ if (typeof br.id !== 'string' || br.id.length === 0) {
92
+ issues.push({ field: `barrels[${idx}].id`, message: 'id required' });
93
+ }
94
+ if (typeof br.path !== 'string' || br.path.length === 0) {
95
+ issues.push({ field: `barrels[${idx}].path`, message: 'path required' });
96
+ }
97
+ });
98
+ }
99
+ }
100
+ if (obj.keyTable !== undefined && obj.keyTable !== null) {
101
+ const k = obj.keyTable;
102
+ if (typeof k !== 'object') {
103
+ issues.push({ field: 'keyTable', message: 'keyTable must be an object' });
104
+ }
105
+ else {
106
+ if (typeof k.path !== 'string' || k.path.length === 0) {
107
+ issues.push({ field: 'keyTable.path', message: 'path required' });
108
+ }
109
+ const validCase = new Set(['upperSnake', 'pascal', 'camel', 'kebab']);
110
+ if (typeof k.keyCase !== 'string' || !validCase.has(k.keyCase)) {
111
+ issues.push({ field: 'keyTable.keyCase', message: 'keyCase must be one of upperSnake|pascal|camel|kebab' });
112
+ }
113
+ if (typeof k.valueCase !== 'string' || !validCase.has(k.valueCase)) {
114
+ issues.push({ field: 'keyTable.valueCase', message: 'valueCase must be one of upperSnake|pascal|camel|kebab' });
115
+ }
116
+ }
117
+ }
118
+ return { valid: issues.length === 0, issues };
119
+ }
@@ -19,7 +19,7 @@ export interface IScaffoldPatternVariable {
19
19
  description?: string;
20
20
  }
21
21
  export interface IScaffoldPattern {
22
- /** Stable id, e.g. "myproj.service-pattern". */
22
+ /** Stable id, e.g. "myproj.plugin-contract-pattern". */
23
23
  id: string;
24
24
  /** Short human-readable title. */
25
25
  title: string;
@@ -34,7 +34,7 @@ export interface IScaffoldPattern {
34
34
  /** Variable extraction strategies. */
35
35
  variables: readonly IScaffoldPatternVariable[];
36
36
  /** Lifecycle hooks where this pattern is consulted. */
37
- appliesWhen: readonly ('onboard' | 'infer-template' | string)[];
37
+ appliesWhen: readonly ('onboard' | 'infer-template' | 'create-plugin' | string)[];
38
38
  /** Confidence floor when matched. */
39
39
  confidence: 'high' | 'medium' | 'low';
40
40
  /** Free-form tags for grouping. */
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold-pattern.d.ts","sourceRoot":"","sources":["../src/scaffold-pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAClC,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,yBAAyB,MAAM,EAAE,GACjC,cAAc,GACd,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,0BAA0B,CAAC;IACjC,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,gDAAgD;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iCAAiC;IACjC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC/C,uDAAuD;IACvD,WAAW,EAAE,SAAS,CAAC,SAAS,GAAG,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC;IAChE,qCAAqC;IACrC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAEjF;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACpC,SAAS,gBAAgB,EAAE,CAE7B;AAED,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAO7D,CAAC;AAEH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/D"}
1
+ {"version":3,"file":"scaffold-pattern.d.ts","sourceRoot":"","sources":["../src/scaffold-pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4EAA4E;AAC5E,MAAM,MAAM,0BAA0B,GAClC,gBAAgB,GAChB,iBAAiB,GACjB,WAAW,GACX,yBAAyB,MAAM,EAAE,GACjC,cAAc,GACd,eAAe,GACf,oBAAoB,CAAC;AAEzB,MAAM,WAAW,wBAAwB;IACvC,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,IAAI,EAAE,0BAA0B,CAAC;IACjC,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,EAAE,EAAE,MAAM,CAAC;IACX,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,+DAA+D;IAC/D,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iCAAiC;IACjC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,sCAAsC;IACtC,SAAS,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC/C,uDAAuD;IACvD,WAAW,EAAE,SAAS,CAAC,SAAS,GAAG,gBAAgB,GAAG,eAAe,GAAG,MAAM,CAAC,EAAE,CAAC;IAClF,qCAAqC;IACrC,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B;;;;OAIG;IACH,gBAAgB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACtC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,gBAAgB,CAEjF;AAED,yEAAyE;AACzE,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,GACpC,SAAS,gBAAgB,EAAE,CAE7B;AAED,eAAO,MAAM,8BAA8B,EAAE,WAAW,CAAC,MAAM,CAO7D,CAAC;AAEH,wBAAgB,4BAA4B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAI/D"}
package/package.json CHANGED
@@ -1,16 +1,15 @@
1
1
  {
2
2
  "name": "@shrkcrft/plugin-api",
3
- "version": "0.1.0-alpha.8",
3
+ "version": "0.1.0-alpha.9",
4
4
  "description": "SharkCraft plugin API: extension points for commands, knowledge, templates, MCP tools.",
5
5
  "license": "MIT",
6
6
  "author": "SharkCraft contributors",
7
7
  "type": "module",
8
8
  "main": "./dist/index.js",
9
- "types": "./dist/index.d.d.ts",
9
+ "types": "./dist/index.d.ts",
10
10
  "exports": {
11
11
  ".": {
12
12
  "types": "./dist/index.d.ts",
13
- "bun": "./src/index.ts",
14
13
  "import": "./dist/index.js",
15
14
  "default": "./dist/index.js"
16
15
  }
@@ -22,12 +21,12 @@
22
21
  ],
23
22
  "repository": {
24
23
  "type": "git",
25
- "url": "git+https://github.com/shrkcrft/sharkcraft.git",
24
+ "url": "git+https://github.com/sharkcraft/sharkcraft.git",
26
25
  "directory": "packages/plugin-api"
27
26
  },
28
- "homepage": "https://github.com/shrkcrft/sharkcraft",
27
+ "homepage": "https://github.com/sharkcraft/sharkcraft",
29
28
  "bugs": {
30
- "url": "https://github.com/shrkcrft/sharkcraft/issues"
29
+ "url": "https://github.com/sharkcraft/sharkcraft/issues"
31
30
  },
32
31
  "keywords": [
33
32
  "sharkcraft",
@@ -41,7 +40,7 @@
41
40
  "typecheck": "tsc --noEmit -p tsconfig.json"
42
41
  },
43
42
  "dependencies": {
44
- "@shrkcrft/core": "^0.1.0-alpha.8"
43
+ "@shrkcrft/core": "^0.1.0-alpha.9"
45
44
  },
46
45
  "publishConfig": {
47
46
  "access": "public"