@pikku/addon-console 0.12.8 → 0.12.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.
Files changed (132) hide show
  1. package/dist/.pikku/addon/pikku-addon-types.gen.d.ts +1 -1
  2. package/dist/.pikku/addon/pikku-addon-types.gen.js +1 -1
  3. package/dist/.pikku/addon/pikku-package.gen.js +1 -1
  4. package/dist/.pikku/agent/pikku-agent-map.gen.d.ts +1 -1
  5. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +1 -1
  6. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  7. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  8. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  9. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  10. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  11. package/dist/.pikku/function/pikku-function-types.gen.d.ts +43 -69
  12. package/dist/.pikku/function/pikku-function-types.gen.d.ts.map +1 -1
  13. package/dist/.pikku/function/pikku-function-types.gen.js +33 -40
  14. package/dist/.pikku/function/pikku-function-types.gen.js.map +1 -1
  15. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  16. package/dist/.pikku/function/pikku-functions-meta.gen.json +115 -12
  17. package/dist/.pikku/function/pikku-functions.gen.js +7 -1
  18. package/dist/.pikku/function/pikku-functions.gen.js.map +1 -1
  19. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  20. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  21. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  22. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  23. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  24. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  25. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  26. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  27. package/dist/.pikku/pikku-services.gen.d.ts +5 -2
  28. package/dist/.pikku/pikku-services.gen.d.ts.map +1 -1
  29. package/dist/.pikku/pikku-services.gen.js +3 -0
  30. package/dist/.pikku/pikku-services.gen.js.map +1 -1
  31. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  32. package/dist/.pikku/pikku-types.gen.js +1 -1
  33. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  34. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  35. package/dist/.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts +20 -6
  36. package/dist/.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +20 -6
  37. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  38. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +3 -0
  39. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  40. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  41. package/dist/.pikku/schemas/register.gen.js +7 -1
  42. package/dist/.pikku/schemas/register.gen.js.map +1 -1
  43. package/dist/.pikku/schemas/schemas/AddonPackageInfo.schema.json +1 -1
  44. package/dist/.pikku/schemas/schemas/AllMeta.schema.json +1 -1
  45. package/dist/.pikku/schemas/schemas/FunctionCoverageReport.schema.json +1 -0
  46. package/dist/.pikku/schemas/schemas/GetAddonMetaOutput.schema.json +1 -1
  47. package/dist/.pikku/schemas/schemas/GetAgentThreadsInput.schema.json +1 -1
  48. package/dist/.pikku/schemas/schemas/GetFunctionsMetaOutput.schema.json +1 -1
  49. package/dist/.pikku/schemas/schemas/GetStateDiffInput.schema.json +1 -0
  50. package/dist/.pikku/schemas/schemas/StateDiff.schema.json +1 -0
  51. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  52. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  53. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  54. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  55. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  56. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  57. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  58. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  59. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  60. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  61. package/dist/.pikku/workflow/pikku-workflow-map.gen.d.ts +1 -1
  62. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +1 -1
  63. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  64. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  65. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
  66. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  67. package/dist/src/functions/delete-agent-thread.function.d.ts.map +1 -1
  68. package/dist/src/functions/delete-agent-thread.function.js.map +1 -1
  69. package/dist/src/functions/delete-workflow-run.function.d.ts.map +1 -1
  70. package/dist/src/functions/delete-workflow-run.function.js.map +1 -1
  71. package/dist/src/functions/get-agent-thread-messages.function.d.ts.map +1 -1
  72. package/dist/src/functions/get-agent-thread-messages.function.js.map +1 -1
  73. package/dist/src/functions/get-agent-thread-runs.function.d.ts.map +1 -1
  74. package/dist/src/functions/get-agent-thread-runs.function.js.map +1 -1
  75. package/dist/src/functions/get-agent-threads.function.d.ts +3 -0
  76. package/dist/src/functions/get-agent-threads.function.d.ts.map +1 -1
  77. package/dist/src/functions/get-agent-threads.function.js +2 -1
  78. package/dist/src/functions/get-agent-threads.function.js.map +1 -1
  79. package/dist/src/functions/get-ai-workflows.function.d.ts.map +1 -1
  80. package/dist/src/functions/get-ai-workflows.function.js.map +1 -1
  81. package/dist/src/functions/get-function-coverage.function.d.ts +26 -0
  82. package/dist/src/functions/get-function-coverage.function.d.ts.map +1 -0
  83. package/dist/src/functions/get-function-coverage.function.js +22 -0
  84. package/dist/src/functions/get-function-coverage.function.js.map +1 -0
  85. package/dist/src/functions/get-functions-meta.function.d.ts +10 -1
  86. package/dist/src/functions/get-functions-meta.function.d.ts.map +1 -1
  87. package/dist/src/functions/get-functions-meta.function.js +14 -8
  88. package/dist/src/functions/get-functions-meta.function.js.map +1 -1
  89. package/dist/src/functions/get-state-diff.function.d.ts +12 -0
  90. package/dist/src/functions/get-state-diff.function.d.ts.map +1 -0
  91. package/dist/src/functions/get-state-diff.function.js +13 -0
  92. package/dist/src/functions/get-state-diff.function.js.map +1 -0
  93. package/dist/src/functions/get-workflow-run-history.function.d.ts.map +1 -1
  94. package/dist/src/functions/get-workflow-run-history.function.js.map +1 -1
  95. package/dist/src/functions/get-workflow-run-names.function.d.ts.map +1 -1
  96. package/dist/src/functions/get-workflow-run-names.function.js.map +1 -1
  97. package/dist/src/functions/get-workflow-run-steps.function.d.ts.map +1 -1
  98. package/dist/src/functions/get-workflow-run-steps.function.js.map +1 -1
  99. package/dist/src/functions/get-workflow-run.function.d.ts.map +1 -1
  100. package/dist/src/functions/get-workflow-run.function.js.map +1 -1
  101. package/dist/src/functions/get-workflow-runs.function.d.ts.map +1 -1
  102. package/dist/src/functions/get-workflow-runs.function.js.map +1 -1
  103. package/dist/src/functions/get-workflow-version.function.d.ts.map +1 -1
  104. package/dist/src/functions/get-workflow-version.function.js.map +1 -1
  105. package/dist/src/functions/read-agent-source.function.d.ts.map +1 -1
  106. package/dist/src/functions/read-agent-source.function.js.map +1 -1
  107. package/dist/src/functions/read-function-body.function.d.ts.map +1 -1
  108. package/dist/src/functions/read-function-body.function.js.map +1 -1
  109. package/dist/src/functions/read-function-source.function.d.ts.map +1 -1
  110. package/dist/src/functions/read-function-source.function.js.map +1 -1
  111. package/dist/src/functions/run-function-tests.function.d.ts +3 -0
  112. package/dist/src/functions/run-function-tests.function.d.ts.map +1 -0
  113. package/dist/src/functions/run-function-tests.function.js +64 -0
  114. package/dist/src/functions/run-function-tests.function.js.map +1 -0
  115. package/dist/src/functions/update-agent-config.function.d.ts.map +1 -1
  116. package/dist/src/functions/update-agent-config.function.js.map +1 -1
  117. package/dist/src/functions/update-function-body.function.d.ts.map +1 -1
  118. package/dist/src/functions/update-function-body.function.js.map +1 -1
  119. package/dist/src/functions/update-function-config.function.d.ts.map +1 -1
  120. package/dist/src/functions/update-function-config.function.js.map +1 -1
  121. package/dist/src/services/state-diff.service.d.ts +76 -0
  122. package/dist/src/services/state-diff.service.d.ts.map +1 -0
  123. package/dist/src/services/state-diff.service.js +148 -0
  124. package/dist/src/services/state-diff.service.js.map +1 -0
  125. package/dist/src/services/wiring.service.d.ts +18 -1
  126. package/dist/src/services/wiring.service.d.ts.map +1 -1
  127. package/dist/src/services/wiring.service.js +254 -10
  128. package/dist/src/services/wiring.service.js.map +1 -1
  129. package/dist/src/services.d.ts.map +1 -1
  130. package/dist/src/services.js +6 -1
  131. package/dist/src/services.js.map +1 -1
  132. package/package.json +10 -5
@@ -0,0 +1,76 @@
1
+ /**
2
+ * StateDiffService computes a structural diff between two `.pikku/`
3
+ * directories — typically "ours" (the user's current branch) and "base"
4
+ * (a baseline checkout, often a worktree at `main`).
5
+ *
6
+ * Both directories are expected to contain the meta JSON files emitted by
7
+ * `pikku all`. Files that are missing on either side are treated as empty
8
+ * objects, so the diff degrades gracefully.
9
+ */
10
+ declare const META_FILES: {
11
+ readonly functions: "function/pikku-functions-meta.gen.json";
12
+ readonly middleware: "middleware/pikku-middleware-groups-meta.gen.json";
13
+ readonly http: "http/pikku-http-wirings-meta.gen.json";
14
+ readonly scheduler: "scheduler/pikku-schedulers-wirings-meta.gen.json";
15
+ readonly queue: "queue/pikku-queue-workers-wirings-meta.gen.json";
16
+ readonly channel: "channel/pikku-channels-meta.gen.json";
17
+ readonly trigger: "trigger/pikku-trigger-meta.gen.json";
18
+ readonly mcp: "mcp/pikku-mcp-wirings-meta.gen.json";
19
+ readonly agent: "agent/pikku-agent-wirings-meta.gen.json";
20
+ readonly cli: "cli/pikku-cli-wirings-meta.gen.json";
21
+ readonly variables: "variables/pikku-variables-meta.gen.json";
22
+ readonly secrets: "secrets/pikku-secrets-meta.gen.json";
23
+ };
24
+ export type StateDiffCategory = keyof typeof META_FILES;
25
+ export interface DiffEntry<T = Record<string, unknown>> {
26
+ id: string;
27
+ status: 'added' | 'removed' | 'modified' | 'unchanged';
28
+ ours?: T;
29
+ base?: T;
30
+ }
31
+ export interface CategoryDiff {
32
+ added: number;
33
+ removed: number;
34
+ modified: number;
35
+ unchanged: number;
36
+ entries: DiffEntry[];
37
+ }
38
+ export interface StateDiff {
39
+ oursPath: string;
40
+ basePath: string;
41
+ oursExists: boolean;
42
+ baseExists: boolean;
43
+ categories: Record<StateDiffCategory, CategoryDiff>;
44
+ summary: Record<StateDiffCategory, {
45
+ added: number;
46
+ removed: number;
47
+ modified: number;
48
+ }>;
49
+ }
50
+ export declare class StateDiffService {
51
+ private readonly rootDir;
52
+ constructor(rootDir: string);
53
+ diff(input: {
54
+ oursPath?: string;
55
+ basePath: string;
56
+ }): Promise<StateDiff>;
57
+ private resolvePath;
58
+ private readMeta;
59
+ /**
60
+ * For nested-key categories like HTTP wirings ({ [method]: { [route]: meta } }),
61
+ * we flatten to a single keyspace `<method>:<route>` so the diff is uniform.
62
+ * Other categories are already flat ({ [id]: meta }).
63
+ */
64
+ private flatten;
65
+ private diffCategory;
66
+ /**
67
+ * Fields that vary by absolute path or by environment but don't represent
68
+ * a meaningful structural change. Excluded from equality so the same
69
+ * function in two different working directories isn't flagged as modified.
70
+ */
71
+ private static readonly NORMALIZE_IGNORE;
72
+ private normalize;
73
+ private shallowEqual;
74
+ }
75
+ export {};
76
+ //# sourceMappingURL=state-diff.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-diff.service.d.ts","sourceRoot":"","sources":["../../../src/services/state-diff.service.ts"],"names":[],"mappings":"AAIA;;;;;;;;GAQG;AAEH,QAAA,MAAM,UAAU;;;;;;;;;;;;;CAaN,CAAA;AAEV,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,UAAU,CAAA;AAEvD,MAAM,WAAW,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACpD,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW,CAAA;IACtD,IAAI,CAAC,EAAE,CAAC,CAAA;IACR,IAAI,CAAC,EAAE,CAAC,CAAA;CACT;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,SAAS,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,OAAO,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC,CAAA;IACnD,OAAO,EAAE,MAAM,CACb,iBAAiB,EACjB;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CACrD,CAAA;CACF;AAED,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,MAAM;IAEtC,IAAI,CAAC,KAAK,EAAE;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;QACjB,QAAQ,EAAE,MAAM,CAAA;KACjB,GAAG,OAAO,CAAC,SAAS,CAAC;IA8BtB,OAAO,CAAC,WAAW;YAIL,QAAQ;IAatB;;;;OAIG;IACH,OAAO,CAAC,OAAO;IAkBf,OAAO,CAAC,YAAY;IA4CpB;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAA0B;IAElE,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,148 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { readFile } from 'node:fs/promises';
3
+ import { join, isAbsolute, resolve } from 'node:path';
4
+ /**
5
+ * StateDiffService computes a structural diff between two `.pikku/`
6
+ * directories — typically "ours" (the user's current branch) and "base"
7
+ * (a baseline checkout, often a worktree at `main`).
8
+ *
9
+ * Both directories are expected to contain the meta JSON files emitted by
10
+ * `pikku all`. Files that are missing on either side are treated as empty
11
+ * objects, so the diff degrades gracefully.
12
+ */
13
+ const META_FILES = {
14
+ functions: 'function/pikku-functions-meta.gen.json',
15
+ middleware: 'middleware/pikku-middleware-groups-meta.gen.json',
16
+ http: 'http/pikku-http-wirings-meta.gen.json',
17
+ scheduler: 'scheduler/pikku-schedulers-wirings-meta.gen.json',
18
+ queue: 'queue/pikku-queue-workers-wirings-meta.gen.json',
19
+ channel: 'channel/pikku-channels-meta.gen.json',
20
+ trigger: 'trigger/pikku-trigger-meta.gen.json',
21
+ mcp: 'mcp/pikku-mcp-wirings-meta.gen.json',
22
+ agent: 'agent/pikku-agent-wirings-meta.gen.json',
23
+ cli: 'cli/pikku-cli-wirings-meta.gen.json',
24
+ variables: 'variables/pikku-variables-meta.gen.json',
25
+ secrets: 'secrets/pikku-secrets-meta.gen.json',
26
+ };
27
+ export class StateDiffService {
28
+ constructor(rootDir) {
29
+ this.rootDir = rootDir;
30
+ }
31
+ async diff(input) {
32
+ const oursPath = this.resolvePath(input.oursPath ?? '.pikku');
33
+ const basePath = this.resolvePath(input.basePath);
34
+ const oursExists = existsSync(oursPath);
35
+ const baseExists = existsSync(basePath);
36
+ const categories = {};
37
+ const summary = {};
38
+ for (const [name, relPath] of Object.entries(META_FILES)) {
39
+ const ours = await this.readMeta(join(oursPath, relPath));
40
+ const base = await this.readMeta(join(basePath, relPath));
41
+ const cat = this.diffCategory(name, ours, base);
42
+ categories[name] = cat;
43
+ summary[name] = {
44
+ added: cat.added,
45
+ removed: cat.removed,
46
+ modified: cat.modified,
47
+ };
48
+ }
49
+ return { oursPath, basePath, oursExists, baseExists, categories, summary };
50
+ }
51
+ resolvePath(p) {
52
+ return isAbsolute(p) ? p : resolve(this.rootDir, p);
53
+ }
54
+ async readMeta(path) {
55
+ if (!existsSync(path))
56
+ return {};
57
+ try {
58
+ const raw = await readFile(path, 'utf-8');
59
+ const parsed = JSON.parse(raw);
60
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed))
61
+ return {};
62
+ return parsed;
63
+ }
64
+ catch {
65
+ return {};
66
+ }
67
+ }
68
+ /**
69
+ * For nested-key categories like HTTP wirings ({ [method]: { [route]: meta } }),
70
+ * we flatten to a single keyspace `<method>:<route>` so the diff is uniform.
71
+ * Other categories are already flat ({ [id]: meta }).
72
+ */
73
+ flatten(category, raw) {
74
+ if (category !== 'http')
75
+ return raw;
76
+ const flat = {};
77
+ for (const [method, routes] of Object.entries(raw)) {
78
+ if (routes && typeof routes === 'object' && !Array.isArray(routes)) {
79
+ for (const [route, meta] of Object.entries(routes)) {
80
+ flat[`${method}:${route}`] = meta;
81
+ }
82
+ }
83
+ }
84
+ return flat;
85
+ }
86
+ diffCategory(category, oursRaw, baseRaw) {
87
+ const ours = this.flatten(category, oursRaw);
88
+ const base = this.flatten(category, baseRaw);
89
+ const allIds = new Set([...Object.keys(ours), ...Object.keys(base)]);
90
+ const entries = [];
91
+ let added = 0;
92
+ let removed = 0;
93
+ let modified = 0;
94
+ let unchanged = 0;
95
+ for (const id of allIds) {
96
+ const o = ours[id];
97
+ const b = base[id];
98
+ if (o && !b) {
99
+ entries.push({ id, status: 'added', ours: o });
100
+ added++;
101
+ }
102
+ else if (!o && b) {
103
+ entries.push({ id, status: 'removed', base: b });
104
+ removed++;
105
+ }
106
+ else if (o && b) {
107
+ if (this.shallowEqual(o, b)) {
108
+ entries.push({ id, status: 'unchanged', ours: o, base: b });
109
+ unchanged++;
110
+ }
111
+ else {
112
+ entries.push({ id, status: 'modified', ours: o, base: b });
113
+ modified++;
114
+ }
115
+ }
116
+ }
117
+ entries.sort((a, b) => {
118
+ const order = { added: 0, modified: 1, removed: 2, unchanged: 3 };
119
+ return order[a.status] - order[b.status] || a.id.localeCompare(b.id);
120
+ });
121
+ return { added, removed, modified, unchanged, entries };
122
+ }
123
+ normalize(value) {
124
+ if (Array.isArray(value))
125
+ return value.map((v) => this.normalize(v));
126
+ if (value && typeof value === 'object') {
127
+ const out = {};
128
+ const keys = Object.keys(value).sort();
129
+ for (const k of keys) {
130
+ if (StateDiffService.NORMALIZE_IGNORE.has(k))
131
+ continue;
132
+ out[k] = this.normalize(value[k]);
133
+ }
134
+ return out;
135
+ }
136
+ return value;
137
+ }
138
+ shallowEqual(a, b) {
139
+ return (JSON.stringify(this.normalize(a)) === JSON.stringify(this.normalize(b)));
140
+ }
141
+ }
142
+ /**
143
+ * Fields that vary by absolute path or by environment but don't represent
144
+ * a meaningful structural change. Excluded from equality so the same
145
+ * function in two different working directories isn't flagged as modified.
146
+ */
147
+ StateDiffService.NORMALIZE_IGNORE = new Set(['sourceFile']);
148
+ //# sourceMappingURL=state-diff.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-diff.service.js","sourceRoot":"","sources":["../../../src/services/state-diff.service.ts"],"names":[],"mappings":"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"}
@@ -175,6 +175,24 @@ export interface MetaCounts {
175
175
  secrets: number;
176
176
  variables: number;
177
177
  }
178
+ export interface FunctionTestScenario {
179
+ featureName: string;
180
+ featureDescription?: string;
181
+ featureFile?: string;
182
+ scenarioName: string;
183
+ status: 'pass' | 'fail';
184
+ duration?: string;
185
+ steps: string[];
186
+ }
187
+ export interface FunctionTestData {
188
+ generatedAt?: string | null;
189
+ status: 'covered' | 'partial' | 'uncovered' | 'unknown';
190
+ coveredLines: number;
191
+ totalLines: number;
192
+ ratio: number;
193
+ missedLines?: number[];
194
+ scenarios: FunctionTestScenario[];
195
+ }
178
196
  export interface PikkuMetaState {
179
197
  functions: FunctionMeta[];
180
198
  httpMeta: HttpRouteMeta[];
@@ -194,7 +212,6 @@ export interface PikkuMetaState {
194
212
  secretsMeta: Record<string, unknown>;
195
213
  credentialsMeta: Record<string, unknown>;
196
214
  variablesMeta: Record<string, unknown>;
197
- modelAliases: string[];
198
215
  }
199
216
  export interface AllMeta extends PikkuMetaState {
200
217
  functionUsedBy: Record<string, FunctionUsedBy>;
@@ -1 +1 @@
1
- {"version":3,"file":"wiring.service.d.ts","sourceRoot":"","sources":["../../../src/services/wiring.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wiring.service.d.ts","sourceRoot":"","sources":["../../../src/services/wiring.service.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,254 @@
1
- import { pikkuState } from '@pikku/core/internal';
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'node:path';
2
3
  export class NotFoundError extends Error {
3
4
  constructor(message) {
4
5
  super(message);
5
6
  this.name = 'NotFoundError';
6
7
  }
7
8
  }
9
+ function asArray(value) {
10
+ return Array.isArray(value) ? value : [];
11
+ }
12
+ function parseJsonOrNull(content) {
13
+ try {
14
+ return JSON.parse(content);
15
+ }
16
+ catch {
17
+ return null;
18
+ }
19
+ }
20
+ async function readOptionalFile(path) {
21
+ try {
22
+ return await readFile(path, 'utf-8');
23
+ }
24
+ catch {
25
+ return null;
26
+ }
27
+ }
28
+ async function readOptionalMetaFile(metaSource, relativePath) {
29
+ if (metaSource &&
30
+ typeof metaSource === 'object' &&
31
+ 'readFile' in metaSource &&
32
+ typeof metaSource.readFile === 'function') {
33
+ try {
34
+ return await metaSource.readFile(relativePath);
35
+ }
36
+ catch {
37
+ return null;
38
+ }
39
+ }
40
+ if (typeof metaSource === 'string' && metaSource.length > 0) {
41
+ return readOptionalFile(join(metaSource, relativePath));
42
+ }
43
+ return null;
44
+ }
45
+ function extractCucumberMessages(html) {
46
+ const match = html.match(/window\.CUCUMBER_MESSAGES\s*=\s*(\[[\s\S]*?\]);/);
47
+ if (!match) {
48
+ return [];
49
+ }
50
+ const rawMessages = match[1];
51
+ if (!rawMessages) {
52
+ return [];
53
+ }
54
+ const parsed = parseJsonOrNull(rawMessages);
55
+ return asArray(parsed);
56
+ }
57
+ function durationToMs(duration) {
58
+ if (!duration || typeof duration !== 'object') {
59
+ return 0;
60
+ }
61
+ const record = duration;
62
+ const seconds = Number(record.seconds ?? 0);
63
+ const nanos = Number(record.nanos ?? 0);
64
+ const totalMs = seconds * 1000 + nanos / 1_000_000;
65
+ return Number.isFinite(totalMs) ? totalMs : 0;
66
+ }
67
+ function cucumberTimestampToIso(timestamp) {
68
+ if (!timestamp || typeof timestamp !== 'object') {
69
+ return null;
70
+ }
71
+ const record = timestamp;
72
+ const seconds = Number(record.seconds ?? 0);
73
+ const nanos = Number(record.nanos ?? 0);
74
+ const totalMs = seconds * 1000 + nanos / 1_000_000;
75
+ if (!Number.isFinite(totalMs) || totalMs <= 0) {
76
+ return null;
77
+ }
78
+ return new Date(totalMs).toISOString();
79
+ }
80
+ function expandCalledNames(name, rpcMeta) {
81
+ const withoutVersion = name.replace(/@v\d+$/i, '');
82
+ return [
83
+ ...new Set([
84
+ name,
85
+ rpcMeta[name],
86
+ withoutVersion !== name ? withoutVersion : undefined,
87
+ rpcMeta[withoutVersion],
88
+ ].filter((value) => !!value)),
89
+ ];
90
+ }
91
+ function uniqueFunctionKeys(func) {
92
+ return [
93
+ ...new Set([func.pikkuFuncId, func.name].filter((value) => !!value)),
94
+ ];
95
+ }
96
+ function buildScenarioMaps(messages, rpcMeta) {
97
+ const featureNamesByUri = new Map();
98
+ const featureDescriptionsByUri = new Map();
99
+ const scenarioByAstId = new Map();
100
+ const pickleById = new Map();
101
+ const testCaseById = new Map();
102
+ const testCaseStartedById = new Map();
103
+ const stepResultsByStartedId = new Map();
104
+ let generatedAt = null;
105
+ for (const message of messages) {
106
+ const record = message;
107
+ const gherkinDocument = record.gherkinDocument;
108
+ if (gherkinDocument?.uri && gherkinDocument.feature?.name) {
109
+ featureNamesByUri.set(gherkinDocument.uri, gherkinDocument.feature.name);
110
+ featureDescriptionsByUri.set(gherkinDocument.uri, gherkinDocument.feature.description ?? '');
111
+ }
112
+ for (const child of asArray(gherkinDocument?.feature?.children)) {
113
+ const scenario = child?.scenario;
114
+ if (!scenario?.id)
115
+ continue;
116
+ const steps = asArray(scenario.steps).map((step) => `${(step.keyword ?? '').trim()} ${step.text ?? ''}`.trim());
117
+ scenarioByAstId.set(scenario.id, {
118
+ featureName: gherkinDocument?.feature?.name ?? '',
119
+ featureDescription: gherkinDocument?.feature?.description ?? '',
120
+ scenarioName: scenario.name ?? '',
121
+ steps,
122
+ });
123
+ }
124
+ const pickle = record.pickle;
125
+ if (pickle?.id)
126
+ pickleById.set(pickle.id, pickle);
127
+ const testCase = record.testCase;
128
+ if (testCase?.id)
129
+ testCaseById.set(testCase.id, testCase);
130
+ const started = record.testCaseStarted;
131
+ if (started?.id) {
132
+ testCaseStartedById.set(started.id, started);
133
+ const startedAt = cucumberTimestampToIso(started.timestamp);
134
+ if (startedAt && (!generatedAt || startedAt > generatedAt)) {
135
+ generatedAt = startedAt;
136
+ }
137
+ }
138
+ const finished = record.testStepFinished;
139
+ if (finished?.testCaseStartedId) {
140
+ const entries = stepResultsByStartedId.get(finished.testCaseStartedId) ?? [];
141
+ entries.push(finished);
142
+ stepResultsByStartedId.set(finished.testCaseStartedId, entries);
143
+ }
144
+ }
145
+ const scenariosByFunction = new Map();
146
+ for (const started of testCaseStartedById.values()) {
147
+ const testCase = testCaseById.get(String(started.testCaseId));
148
+ const pickle = testCase ? pickleById.get(String(testCase.pickleId)) : null;
149
+ if (!pickle)
150
+ continue;
151
+ const astId = asArray(pickle.astNodeIds)[0];
152
+ const astScenario = astId ? scenarioByAstId.get(astId) : null;
153
+ const steps = astScenario?.steps ??
154
+ asArray(pickle.steps)
155
+ .map((step) => step?.text ?? '')
156
+ .filter(Boolean);
157
+ const featureFile = typeof pickle.uri === 'string' ? pickle.uri : undefined;
158
+ const featureName = astScenario?.featureName ||
159
+ (featureFile ? featureNamesByUri.get(featureFile) : '') ||
160
+ '';
161
+ const featureDescription = astScenario?.featureDescription ||
162
+ (featureFile ? featureDescriptionsByUri.get(featureFile) : '') ||
163
+ '';
164
+ const stepResults = (stepResultsByStartedId.get(String(started.id)) ??
165
+ []);
166
+ const status = stepResults.some((entry) => entry?.testStepResult?.status !== 'PASSED' &&
167
+ entry?.testStepResult?.status !== 'SKIPPED')
168
+ ? 'fail'
169
+ : 'pass';
170
+ const totalDurationMs = stepResults.reduce((sum, entry) => sum + durationToMs(entry?.testStepResult?.duration), 0);
171
+ const duration = totalDurationMs > 0 ? `${Math.round(totalDurationMs)}ms` : undefined;
172
+ const scenarioData = {
173
+ featureName,
174
+ featureDescription,
175
+ featureFile,
176
+ scenarioName: String(pickle.name ?? astScenario?.scenarioName ?? 'Scenario'),
177
+ status,
178
+ duration,
179
+ steps,
180
+ };
181
+ const mentionedFunctions = new Set();
182
+ for (const step of steps) {
183
+ const match = step.match(/calls\s+"([^"]+)"/i);
184
+ if (!match)
185
+ continue;
186
+ for (const functionName of expandCalledNames(match[1], rpcMeta)) {
187
+ mentionedFunctions.add(functionName);
188
+ }
189
+ }
190
+ for (const functionName of mentionedFunctions) {
191
+ const scenarios = scenariosByFunction.get(functionName) ?? [];
192
+ scenarios.push(scenarioData);
193
+ scenariosByFunction.set(functionName, scenarios);
194
+ }
195
+ }
196
+ return { scenariosByFunction, generatedAt };
197
+ }
198
+ async function loadFunctionTests(metaSource, functionsMeta, rpcMeta) {
199
+ const coverageCandidates = [
200
+ '../function-tests/coverage/function-coverage.json',
201
+ 'function-tests/coverage/function-coverage.json',
202
+ ];
203
+ const cucumberCandidates = [
204
+ '../function-tests/tests/reports/cucumber-report.html',
205
+ 'function-tests/tests/reports/cucumber-report.html',
206
+ ];
207
+ const coverageContent = (await Promise.all(coverageCandidates.map((path) => readOptionalMetaFile(metaSource, path)))).find((content) => typeof content === 'string' && content.length > 0) ??
208
+ null;
209
+ const cucumberHtml = (await Promise.all(cucumberCandidates.map((path) => readOptionalMetaFile(metaSource, path)))).find((content) => typeof content === 'string' && content.length > 0) ??
210
+ null;
211
+ const coverageJson = coverageContent
212
+ ? parseJsonOrNull(coverageContent)
213
+ : null;
214
+ const coverageFunctions = new Map(asArray(coverageJson?.functions).map((func) => [
215
+ func.name,
216
+ func,
217
+ ]));
218
+ const { scenariosByFunction, generatedAt: scenarioGeneratedAt } = cucumberHtml
219
+ ? buildScenarioMaps(extractCucumberMessages(cucumberHtml), rpcMeta)
220
+ : {
221
+ scenariosByFunction: new Map(),
222
+ generatedAt: null,
223
+ };
224
+ const generatedAt = scenarioGeneratedAt ?? coverageJson?.generatedAt ?? null;
225
+ const testsByFunction = {};
226
+ for (const func of Object.values(functionsMeta)) {
227
+ const functionKeys = uniqueFunctionKeys(func);
228
+ const primaryFunctionKey = functionKeys[0];
229
+ if (!primaryFunctionKey)
230
+ continue;
231
+ const coverage = functionKeys
232
+ .map((key) => coverageFunctions.get(key))
233
+ .find((value) => !!value);
234
+ const scenarios = functionKeys.flatMap((key) => scenariosByFunction.get(key) ?? []);
235
+ if (!coverage && scenarios.length === 0)
236
+ continue;
237
+ const testData = {
238
+ generatedAt,
239
+ status: (coverage?.status ?? 'unknown'),
240
+ coveredLines: Number(coverage?.coveredLines ?? 0),
241
+ totalLines: Number(coverage?.totalLines ?? 0),
242
+ ratio: Number(coverage?.ratio ?? 0),
243
+ missedLines: asArray(coverage?.missedLines).filter((line) => Number.isFinite(line)),
244
+ scenarios,
245
+ };
246
+ for (const functionKey of functionKeys) {
247
+ testsByFunction[functionKey] = testData;
248
+ }
249
+ }
250
+ return testsByFunction;
251
+ }
8
252
  export class WiringService {
9
253
  constructor(metaService) {
10
254
  this.metaService = metaService;
@@ -62,6 +306,15 @@ export class WiringService {
62
306
  pikkuFuncId: value,
63
307
  };
64
308
  }
309
+ const testsByFunction = await loadFunctionTests(this.metaService, functions, rpcMetaRaw);
310
+ for (const func of Object.values(functions)) {
311
+ const funcId = func.pikkuFuncId || func.name;
312
+ if (funcId && testsByFunction[funcId]) {
313
+ ;
314
+ func.tests =
315
+ testsByFunction[funcId];
316
+ }
317
+ }
65
318
  const functionUsedBy = {};
66
319
  const getOrCreate = (funcName) => {
67
320
  if (!functionUsedBy[funcName]) {
@@ -201,14 +454,6 @@ export class WiringService {
201
454
  for (const program of cliMeta) {
202
455
  countCli(program.commands);
203
456
  }
204
- let modelAliases = [];
205
- try {
206
- const modelsConfig = pikkuState(null, 'models', 'config') ?? {};
207
- modelAliases = Object.keys(modelsConfig.models ?? {});
208
- }
209
- catch {
210
- // models config may not be available
211
- }
212
457
  const counts = {
213
458
  functions: Object.values(functions).length,
214
459
  workflows: Object.keys(workflows).length,
@@ -244,7 +489,6 @@ export class WiringService {
244
489
  secretsMeta,
245
490
  credentialsMeta,
246
491
  variablesMeta,
247
- modelAliases,
248
492
  functionUsedBy,
249
493
  counts,
250
494
  };