@pikku/inspector 0.11.0 → 0.11.2

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 (109) hide show
  1. package/CHANGELOG.md +32 -2
  2. package/dist/add/add-channel.js +11 -10
  3. package/dist/add/add-file-with-factory.js +10 -10
  4. package/dist/add/add-forge-credential.d.ts +8 -0
  5. package/dist/add/add-forge-credential.js +77 -0
  6. package/dist/add/add-forge-node.d.ts +7 -0
  7. package/dist/add/add-forge-node.js +77 -0
  8. package/dist/add/add-functions.js +158 -51
  9. package/dist/add/add-http-route.js +28 -4
  10. package/dist/add/add-mcp-prompt.js +6 -5
  11. package/dist/add/add-mcp-resource.js +6 -5
  12. package/dist/add/add-mcp-tool.js +6 -5
  13. package/dist/add/add-middleware.js +1 -1
  14. package/dist/add/add-permission.js +1 -1
  15. package/dist/add/add-queue-worker.js +6 -5
  16. package/dist/add/add-rpc-invocations.d.ts +3 -0
  17. package/dist/add/add-rpc-invocations.js +51 -25
  18. package/dist/add/add-schedule.js +5 -4
  19. package/dist/add/add-workflow-graph.d.ts +6 -0
  20. package/dist/add/add-workflow-graph.js +659 -0
  21. package/dist/add/add-workflow.d.ts +1 -1
  22. package/dist/add/add-workflow.js +191 -69
  23. package/dist/error-codes.d.ts +3 -0
  24. package/dist/error-codes.js +3 -0
  25. package/dist/index.d.ts +5 -0
  26. package/dist/index.js +3 -0
  27. package/dist/inspector.js +29 -9
  28. package/dist/types.d.ts +47 -8
  29. package/dist/utils/extract-function-name.js +7 -7
  30. package/dist/utils/extract-function-node.d.ts +10 -0
  31. package/dist/utils/extract-function-node.js +38 -0
  32. package/dist/utils/extract-node-value.d.ts +8 -0
  33. package/dist/utils/extract-node-value.js +24 -0
  34. package/dist/utils/extract-service-metadata.d.ts +19 -0
  35. package/dist/utils/extract-service-metadata.js +244 -0
  36. package/dist/utils/get-files-and-methods.d.ts +3 -3
  37. package/dist/utils/get-files-and-methods.js +3 -3
  38. package/dist/utils/get-property-value.d.ts +14 -6
  39. package/dist/utils/get-property-value.js +55 -43
  40. package/dist/utils/post-process.d.ts +9 -0
  41. package/dist/utils/post-process.js +30 -3
  42. package/dist/utils/serialize-inspector-state.d.ts +42 -6
  43. package/dist/utils/serialize-inspector-state.js +36 -10
  44. package/dist/utils/workflow/dsl/deserialize-dsl-workflow.d.ts +24 -0
  45. package/dist/utils/workflow/dsl/deserialize-dsl-workflow.js +898 -0
  46. package/dist/utils/workflow/dsl/extract-dsl-workflow.d.ts +17 -0
  47. package/dist/utils/workflow/dsl/extract-dsl-workflow.js +1284 -0
  48. package/dist/utils/workflow/dsl/index.d.ts +7 -0
  49. package/dist/utils/workflow/dsl/index.js +7 -0
  50. package/dist/utils/workflow/dsl/patterns.d.ts +60 -0
  51. package/dist/utils/workflow/dsl/patterns.js +218 -0
  52. package/dist/utils/workflow/dsl/validation.d.ts +30 -0
  53. package/dist/utils/workflow/dsl/validation.js +142 -0
  54. package/dist/utils/workflow/graph/convert-dsl-to-graph.d.ts +13 -0
  55. package/dist/utils/workflow/graph/convert-dsl-to-graph.js +316 -0
  56. package/dist/utils/workflow/graph/index.d.ts +6 -0
  57. package/dist/utils/workflow/graph/index.js +6 -0
  58. package/dist/utils/workflow/graph/serialize-workflow-graph.d.ts +43 -0
  59. package/dist/utils/workflow/graph/serialize-workflow-graph.js +152 -0
  60. package/dist/utils/workflow/graph/workflow-graph.types.d.ts +229 -0
  61. package/dist/utils/workflow/graph/workflow-graph.types.js +38 -0
  62. package/dist/utils/write-service-metadata.d.ts +13 -0
  63. package/dist/utils/write-service-metadata.js +37 -0
  64. package/dist/visit.js +8 -2
  65. package/package.json +16 -4
  66. package/src/add/add-channel.ts +37 -17
  67. package/src/add/add-file-with-factory.ts +10 -10
  68. package/src/add/add-forge-credential.ts +119 -0
  69. package/src/add/add-forge-node.ts +132 -0
  70. package/src/add/add-functions.ts +199 -69
  71. package/src/add/add-http-route.ts +34 -5
  72. package/src/add/add-mcp-prompt.ts +11 -7
  73. package/src/add/add-mcp-resource.ts +11 -7
  74. package/src/add/add-mcp-tool.ts +11 -7
  75. package/src/add/add-middleware.ts +1 -1
  76. package/src/add/add-permission.ts +1 -1
  77. package/src/add/add-queue-worker.ts +11 -12
  78. package/src/add/add-rpc-invocations.ts +61 -31
  79. package/src/add/add-schedule.ts +10 -5
  80. package/src/add/add-workflow-graph.ts +864 -0
  81. package/src/add/add-workflow.ts +212 -116
  82. package/src/error-codes.ts +3 -0
  83. package/src/index.ts +12 -0
  84. package/src/inspector.ts +36 -10
  85. package/src/types.ts +43 -9
  86. package/src/utils/extract-function-name.ts +7 -7
  87. package/src/utils/extract-function-node.ts +58 -0
  88. package/src/utils/extract-node-value.ts +31 -0
  89. package/src/utils/extract-service-metadata.ts +353 -0
  90. package/src/utils/filter-inspector-state.test.ts +3 -3
  91. package/src/utils/filter-utils.test.ts +45 -51
  92. package/src/utils/get-files-and-methods.ts +11 -11
  93. package/src/utils/get-property-value.ts +67 -53
  94. package/src/utils/permissions.test.ts +3 -3
  95. package/src/utils/post-process.ts +56 -3
  96. package/src/utils/serialize-inspector-state.ts +67 -19
  97. package/src/utils/test-data/inspector-state.json +9 -9
  98. package/src/utils/workflow/dsl/deserialize-dsl-workflow.ts +1180 -0
  99. package/src/utils/workflow/dsl/extract-dsl-workflow.ts +1608 -0
  100. package/src/utils/workflow/dsl/index.ts +11 -0
  101. package/src/utils/workflow/dsl/patterns.ts +279 -0
  102. package/src/utils/workflow/dsl/validation.ts +180 -0
  103. package/src/utils/workflow/graph/convert-dsl-to-graph.ts +415 -0
  104. package/src/utils/workflow/graph/index.ts +6 -0
  105. package/src/utils/workflow/graph/serialize-workflow-graph.ts +223 -0
  106. package/src/utils/workflow/graph/workflow-graph.types.ts +280 -0
  107. package/src/utils/write-service-metadata.ts +51 -0
  108. package/src/visit.ts +9 -3
  109. package/tsconfig.tsbuildinfo +1 -1
@@ -1,3 +1,4 @@
1
+ import * as ts from 'typescript'
1
2
  import { InspectorState } from '../types.js'
2
3
  import {
3
4
  FunctionServicesMeta,
@@ -5,6 +6,10 @@ import {
5
6
  PermissionMetadata,
6
7
  } from '@pikku/core'
7
8
  import { extractTypeKeys } from './type-utils.js'
9
+ import {
10
+ extractAllServiceMetadata,
11
+ ServiceMetadata,
12
+ } from './extract-service-metadata.js'
8
13
 
9
14
  /**
10
15
  * Helper to extract wire-level middleware/permission names from metadata.
@@ -82,9 +87,9 @@ function extractAllServices(
82
87
  const servicesTypes = state.typesLookup.get('Services')
83
88
  if (servicesTypes && servicesTypes.length > 0) {
84
89
  const allServiceNames = extractTypeKeys(servicesTypes[0])
85
- // Session services are those in Services but not in SingletonServices
90
+ // Wire services are those in Services but not in SingletonServices
86
91
  const singletonSet = new Set(state.serviceAggregation.allSingletonServices)
87
- state.serviceAggregation.allSessionServices = allServiceNames
92
+ state.serviceAggregation.allWireServices = allServiceNames
88
93
  .filter((name) => !singletonSet.has(name))
89
94
  .sort()
90
95
  }
@@ -206,7 +211,7 @@ export function aggregateRequiredServices(
206
211
  }
207
212
 
208
213
  // 5. Services from session service factories
209
- for (const singletonServices of state.sessionServicesMeta.values()) {
214
+ for (const singletonServices of state.wireServicesMeta.values()) {
210
215
  singletonServices.forEach((service) => {
211
216
  if (!internalServices.has(service)) {
212
217
  requiredServices.add(service)
@@ -214,3 +219,51 @@ export function aggregateRequiredServices(
214
219
  })
215
220
  }
216
221
  }
222
+
223
+ /**
224
+ * Extract service interface metadata for all user-defined services.
225
+ * This extracts metadata for services in SingletonServices and Services types
226
+ * to generate documentation for AI consumption.
227
+ *
228
+ * Must be called after aggregateRequiredServices() to ensure types are loaded.
229
+ */
230
+ export function extractServiceInterfaceMetadata(
231
+ state: InspectorState | Omit<InspectorState, 'typesLookup'>,
232
+ checker: ts.TypeChecker
233
+ ): void {
234
+ if (!('typesLookup' in state)) {
235
+ return
236
+ }
237
+
238
+ const allMetadata: ServiceMetadata[] = []
239
+
240
+ const singletonServicesTypes = state.typesLookup.get('SingletonServices')
241
+ if (singletonServicesTypes && singletonServicesTypes.length > 0) {
242
+ const singletonMeta = extractAllServiceMetadata(
243
+ singletonServicesTypes[0],
244
+ checker,
245
+ state.rootDir
246
+ )
247
+ allMetadata.push(...singletonMeta)
248
+ }
249
+
250
+ const servicesTypes = state.typesLookup.get('Services')
251
+ if (servicesTypes && servicesTypes.length > 0) {
252
+ const wireServicesMeta = extractAllServiceMetadata(
253
+ servicesTypes[0],
254
+ checker,
255
+ state.rootDir
256
+ )
257
+
258
+ const singletonNames = new Set(
259
+ state.serviceAggregation.allSingletonServices
260
+ )
261
+ const uniqueWireServices = wireServicesMeta.filter(
262
+ (meta) => !singletonNames.has(meta.name)
263
+ )
264
+
265
+ allMetadata.push(...uniqueWireServices)
266
+ }
267
+
268
+ state.serviceMetadata = allMetadata
269
+ }
@@ -13,7 +13,7 @@ export interface SerializableInspectorState {
13
13
  { variable: string; type: string | null; typePath: string | null }[],
14
14
  ]
15
15
  >
16
- sessionServicesTypeImportMap: Array<
16
+ wireServicesTypeImportMap: Array<
17
17
  [
18
18
  string,
19
19
  { variable: string; type: string | null; typePath: string | null }[],
@@ -37,13 +37,13 @@ export interface SerializableInspectorState {
37
37
  { variable: string; type: string | null; typePath: string | null }[],
38
38
  ]
39
39
  >
40
- sessionServicesFactories: Array<
40
+ wireServicesFactories: Array<
41
41
  [
42
42
  string,
43
43
  { variable: string; type: string | null; typePath: string | null }[],
44
44
  ]
45
45
  >
46
- sessionServicesMeta: Array<[string, string[]]>
46
+ wireServicesMeta: Array<[string, string[]]>
47
47
  configFactories: Array<
48
48
  [
49
49
  string,
@@ -62,6 +62,7 @@ export interface SerializableInspectorState {
62
62
  >,
63
63
  ]
64
64
  >
65
+ zodLookup: Array<[string, { variableName: string; sourceFile: string }]>
65
66
  functions: {
66
67
  typesMap: {
67
68
  map: Array<[string, { originalName: string; path: string | null }]>
@@ -114,7 +115,9 @@ export interface SerializableInspectorState {
114
115
  }
115
116
  workflows: {
116
117
  meta: InspectorState['workflows']['meta']
117
- files: string[]
118
+ files: Array<[string, { path: string; exportedName: string }]>
119
+ graphMeta: InspectorState['workflows']['graphMeta']
120
+ graphFiles: Array<[string, { path: string; exportedName: string }]>
118
121
  }
119
122
  rpc: {
120
123
  internalMeta: InspectorState['rpc']['internalMeta']
@@ -122,6 +125,7 @@ export interface SerializableInspectorState {
122
125
  exposedMeta: InspectorState['rpc']['exposedMeta']
123
126
  exposedFiles: Array<[string, { path: string; exportedName: string }]>
124
127
  invokedFunctions: string[]
128
+ usedExternalPackages: string[]
125
129
  }
126
130
  mcpEndpoints: {
127
131
  resourcesMeta: InspectorState['mcpEndpoints']['resourcesMeta']
@@ -133,6 +137,14 @@ export interface SerializableInspectorState {
133
137
  meta: InspectorState['cli']['meta']
134
138
  files: string[]
135
139
  }
140
+ forgeNodes: {
141
+ meta: InspectorState['forgeNodes']['meta']
142
+ files: string[]
143
+ }
144
+ forgeCredentials: {
145
+ meta: InspectorState['forgeCredentials']['meta']
146
+ files: string[]
147
+ }
136
148
  middleware: {
137
149
  meta: InspectorState['middleware']['meta']
138
150
  tagMiddleware: Array<
@@ -167,8 +179,18 @@ export interface SerializableInspectorState {
167
179
  usedMiddleware: string[]
168
180
  usedPermissions: string[]
169
181
  allSingletonServices: string[]
170
- allSessionServices: string[]
182
+ allWireServices: string[]
171
183
  }
184
+ serviceMetadata: Array<{
185
+ name: string
186
+ summary: string
187
+ description: string
188
+ package: string
189
+ path: string
190
+ version: string
191
+ interface: string
192
+ expandedProperties: Record<string, string>
193
+ }>
172
194
  }
173
195
 
174
196
  /**
@@ -204,8 +226,8 @@ export function serializeInspectorState(
204
226
  singletonServicesTypeImportMap: Array.from(
205
227
  state.singletonServicesTypeImportMap.entries()
206
228
  ),
207
- sessionServicesTypeImportMap: Array.from(
208
- state.sessionServicesTypeImportMap.entries()
229
+ wireServicesTypeImportMap: Array.from(
230
+ state.wireServicesTypeImportMap.entries()
209
231
  ),
210
232
  userSessionTypeImportMap: Array.from(
211
233
  state.userSessionTypeImportMap.entries()
@@ -214,15 +236,14 @@ export function serializeInspectorState(
214
236
  singletonServicesFactories: Array.from(
215
237
  state.singletonServicesFactories.entries()
216
238
  ),
217
- sessionServicesFactories: Array.from(
218
- state.sessionServicesFactories.entries()
219
- ),
220
- sessionServicesMeta: Array.from(state.sessionServicesMeta.entries()),
239
+ wireServicesFactories: Array.from(state.wireServicesFactories.entries()),
240
+ wireServicesMeta: Array.from(state.wireServicesMeta.entries()),
221
241
  configFactories: Array.from(state.configFactories.entries()),
222
242
  filesAndMethods: state.filesAndMethods,
223
243
  filesAndMethodsErrors: Array.from(
224
244
  state.filesAndMethodsErrors.entries()
225
245
  ).map(([key, mapValue]) => [key, Array.from(mapValue.entries())] as const),
246
+ zodLookup: Array.from(state.zodLookup.entries()),
226
247
  functions: {
227
248
  typesMap: serializeTypesMap(state.functions.typesMap),
228
249
  meta: state.functions.meta,
@@ -249,7 +270,9 @@ export function serializeInspectorState(
249
270
  },
250
271
  workflows: {
251
272
  meta: state.workflows.meta,
252
- files: Array.from(state.workflows.files),
273
+ files: Array.from(state.workflows.files.entries()),
274
+ graphMeta: state.workflows.graphMeta,
275
+ graphFiles: Array.from(state.workflows.graphFiles.entries()),
253
276
  },
254
277
  rpc: {
255
278
  internalMeta: state.rpc.internalMeta,
@@ -257,6 +280,7 @@ export function serializeInspectorState(
257
280
  exposedMeta: state.rpc.exposedMeta,
258
281
  exposedFiles: Array.from(state.rpc.exposedFiles.entries()),
259
282
  invokedFunctions: Array.from(state.rpc.invokedFunctions),
283
+ usedExternalPackages: Array.from(state.rpc.usedExternalPackages),
260
284
  },
261
285
  mcpEndpoints: {
262
286
  resourcesMeta: state.mcpEndpoints.resourcesMeta,
@@ -268,6 +292,14 @@ export function serializeInspectorState(
268
292
  meta: state.cli.meta,
269
293
  files: Array.from(state.cli.files),
270
294
  },
295
+ forgeNodes: {
296
+ meta: state.forgeNodes.meta,
297
+ files: Array.from(state.forgeNodes.files),
298
+ },
299
+ forgeCredentials: {
300
+ meta: state.forgeCredentials.meta,
301
+ files: Array.from(state.forgeCredentials.files),
302
+ },
271
303
  middleware: {
272
304
  meta: state.middleware.meta,
273
305
  tagMiddleware: Array.from(state.middleware.tagMiddleware.entries()),
@@ -282,8 +314,9 @@ export function serializeInspectorState(
282
314
  usedMiddleware: Array.from(state.serviceAggregation.usedMiddleware),
283
315
  usedPermissions: Array.from(state.serviceAggregation.usedPermissions),
284
316
  allSingletonServices: state.serviceAggregation.allSingletonServices,
285
- allSessionServices: state.serviceAggregation.allSessionServices,
317
+ allWireServices: state.serviceAggregation.allWireServices,
286
318
  },
319
+ serviceMetadata: state.serviceMetadata,
287
320
  }
288
321
  }
289
322
 
@@ -293,7 +326,9 @@ export function serializeInspectorState(
293
326
  */
294
327
  export function deserializeInspectorState(
295
328
  data: SerializableInspectorState
296
- ): Omit<InspectorState, 'typesLookup'> {
329
+ ): Omit<InspectorState, 'typesLookup' | 'zodLookup'> & {
330
+ zodLookup: Map<string, { variableName: string; sourceFile: string }>
331
+ } {
297
332
  // Helper to deserialize TypesMap
298
333
  const deserializeTypesMap = (
299
334
  serialized: SerializableInspectorState['functions']['typesMap']
@@ -314,12 +349,12 @@ export function deserializeInspectorState(
314
349
  singletonServicesTypeImportMap: new Map(
315
350
  data.singletonServicesTypeImportMap
316
351
  ),
317
- sessionServicesTypeImportMap: new Map(data.sessionServicesTypeImportMap),
352
+ wireServicesTypeImportMap: new Map(data.wireServicesTypeImportMap),
318
353
  userSessionTypeImportMap: new Map(data.userSessionTypeImportMap),
319
354
  configTypeImportMap: new Map(data.configTypeImportMap),
320
355
  singletonServicesFactories: new Map(data.singletonServicesFactories),
321
- sessionServicesFactories: new Map(data.sessionServicesFactories),
322
- sessionServicesMeta: new Map(data.sessionServicesMeta),
356
+ wireServicesFactories: new Map(data.wireServicesFactories),
357
+ wireServicesMeta: new Map(data.wireServicesMeta),
323
358
  configFactories: new Map(data.configFactories),
324
359
  filesAndMethods: data.filesAndMethods,
325
360
  filesAndMethodsErrors: new Map(
@@ -328,6 +363,7 @@ export function deserializeInspectorState(
328
363
  new Map(entries),
329
364
  ])
330
365
  ),
366
+ zodLookup: new Map(data.zodLookup || []),
331
367
  functions: {
332
368
  typesMap: deserializeTypesMap(data.functions.typesMap),
333
369
  meta: data.functions.meta,
@@ -354,7 +390,9 @@ export function deserializeInspectorState(
354
390
  },
355
391
  workflows: {
356
392
  meta: data.workflows.meta,
357
- files: new Set(data.workflows.files),
393
+ files: new Map(data.workflows.files),
394
+ graphMeta: data.workflows.graphMeta || {},
395
+ graphFiles: new Map(data.workflows.graphFiles || []),
358
396
  },
359
397
  rpc: {
360
398
  internalMeta: data.rpc.internalMeta,
@@ -362,6 +400,7 @@ export function deserializeInspectorState(
362
400
  exposedMeta: data.rpc.exposedMeta,
363
401
  exposedFiles: new Map(data.rpc.exposedFiles),
364
402
  invokedFunctions: new Set(data.rpc.invokedFunctions),
403
+ usedExternalPackages: new Set(data.rpc.usedExternalPackages || []),
365
404
  },
366
405
  mcpEndpoints: {
367
406
  resourcesMeta: data.mcpEndpoints.resourcesMeta,
@@ -373,6 +412,14 @@ export function deserializeInspectorState(
373
412
  meta: data.cli.meta,
374
413
  files: new Set(data.cli.files),
375
414
  },
415
+ forgeNodes: {
416
+ meta: data.forgeNodes?.meta || {},
417
+ files: new Set(data.forgeNodes?.files || []),
418
+ },
419
+ forgeCredentials: {
420
+ meta: data.forgeCredentials?.meta || {},
421
+ files: new Set(data.forgeCredentials?.files || []),
422
+ },
376
423
  middleware: {
377
424
  meta: data.middleware.meta,
378
425
  tagMiddleware: new Map(data.middleware.tagMiddleware),
@@ -387,7 +434,8 @@ export function deserializeInspectorState(
387
434
  usedMiddleware: new Set(data.serviceAggregation.usedMiddleware),
388
435
  usedPermissions: new Set(data.serviceAggregation.usedPermissions),
389
436
  allSingletonServices: data.serviceAggregation.allSingletonServices,
390
- allSessionServices: data.serviceAggregation.allSessionServices,
437
+ allWireServices: data.serviceAggregation.allWireServices,
391
438
  },
439
+ serviceMetadata: data.serviceMetadata || [],
392
440
  }
393
441
  }
@@ -12,7 +12,7 @@
12
12
  ]
13
13
  ]
14
14
  ],
15
- "sessionServicesTypeImportMap": [
15
+ "wireServicesTypeImportMap": [
16
16
  [
17
17
  "/Users/yasser/git/pikku/pikku/templates/functions/types/application-types.d.ts",
18
18
  [
@@ -60,19 +60,19 @@
60
60
  ]
61
61
  ]
62
62
  ],
63
- "sessionServicesFactories": [
63
+ "wireServicesFactories": [
64
64
  [
65
65
  "src/services.ts",
66
66
  [
67
67
  {
68
- "variable": "createSessionServices",
69
- "type": "CreateSessionServices",
68
+ "variable": "createWireServices",
69
+ "type": "CreateWireServices",
70
70
  "typePath": "src/services.ts"
71
71
  }
72
72
  ]
73
73
  ]
74
74
  ],
75
- "sessionServicesMeta": [["createSessionServices", []]],
75
+ "wireServicesMeta": [["createWireServices", []]],
76
76
  "configFactories": [
77
77
  [
78
78
  "src/services.ts",
@@ -98,7 +98,7 @@
98
98
  "variable": "SingletonServices",
99
99
  "typePath": "/Users/yasser/git/pikku/pikku/templates/functions/types/application-types.d.ts"
100
100
  },
101
- "sessionServicesType": {
101
+ "wireServicesType": {
102
102
  "file": "/Users/yasser/git/pikku/pikku/templates/functions/types/application-types.d.ts",
103
103
  "type": "Services",
104
104
  "variable": "Services",
@@ -122,10 +122,10 @@
122
122
  "variable": "createSingletonServices",
123
123
  "typePath": "src/services.ts"
124
124
  },
125
- "sessionServicesFactory": {
125
+ "wireServicesFactory": {
126
126
  "file": "src/services.ts",
127
- "type": "CreateSessionServices",
128
- "variable": "createSessionServices",
127
+ "type": "CreateWireServices",
128
+ "variable": "createWireServices",
129
129
  "typePath": "src/services.ts"
130
130
  }
131
131
  },