@pikku/cli 0.12.82 → 0.12.83

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 (214) hide show
  1. package/cli.schema.json +1 -1
  2. package/console-app/assets/{index-ChcXIEhS.js → index-CN_U0k_D.js} +154 -144
  3. package/console-app/assets/{index-DwyRdRuZ.css → index-CpHRlBt-.css} +1 -1
  4. package/console-app/index.html +2 -2
  5. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
  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-channel.js +21 -1
  9. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  10. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  11. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  12. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  14. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  15. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  16. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.json +60 -3
  17. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  18. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  19. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  20. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  21. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  22. package/dist/.pikku/function/pikku-function-types.gen.d.ts +6 -12
  23. package/dist/.pikku/function/pikku-function-types.gen.js +3 -12
  24. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  25. package/dist/.pikku/function/pikku-functions-meta.gen.json +190 -12
  26. package/dist/.pikku/function/pikku-functions.gen.js +15 -1
  27. package/dist/.pikku/http/pikku-http-types.gen.d.ts +2 -24
  28. package/dist/.pikku/http/pikku-http-types.gen.js +2 -24
  29. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +1 -1
  30. package/dist/.pikku/http/pikku-http-wirings.gen.d.ts +1 -1
  31. package/dist/.pikku/http/pikku-http-wirings.gen.js +1 -1
  32. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  33. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  34. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -1
  35. package/dist/.pikku/pikku-bootstrap.gen.js +1 -1
  36. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  37. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  38. package/dist/.pikku/pikku-services.gen.d.ts +4 -1
  39. package/dist/.pikku/pikku-services.gen.js +3 -0
  40. package/dist/.pikku/pikku-types.gen.d.ts +2 -1
  41. package/dist/.pikku/pikku-types.gen.js +3 -1
  42. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  43. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  44. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +1 -1
  45. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +1 -1
  46. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +1 -1
  47. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  48. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +9 -0
  49. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  50. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  51. package/dist/.pikku/schemas/register.gen.js +13 -1
  52. package/dist/.pikku/schemas/schemas/PikkuCLIConfig.schema.json +1 -1
  53. package/dist/.pikku/schemas/schemas/PikkuGraphWiringsOutput.schema.json +1 -0
  54. package/dist/.pikku/schemas/schemas/PikkuImportN8nInput.schema.json +1 -0
  55. package/dist/.pikku/schemas/schemas/PikkuScopesInput.schema.json +1 -0
  56. package/dist/.pikku/schemas/schemas/PikkuWebhookOutput.schema.json +1 -0
  57. package/dist/.pikku/schemas/schemas/ScopesAuditInput.schema.json +1 -0
  58. package/dist/.pikku/schemas/schemas/ScopesPruneInput.schema.json +1 -0
  59. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +5 -0
  60. package/dist/.pikku/scopes/pikku-scope-types.gen.js +4 -0
  61. package/dist/.pikku/scopes/pikku-scopes-meta.gen.json +1 -0
  62. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +35 -0
  63. package/dist/.pikku/scopes/pikku-scopes.gen.js +27 -0
  64. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  65. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  66. package/dist/.pikku/secrets/pikku-secrets-meta.gen.json +1 -0
  67. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +11 -1
  68. package/dist/.pikku/secrets/pikku-secrets.gen.js +11 -1
  69. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  70. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  71. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  72. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  73. package/dist/.pikku/variables/pikku-variables-meta.gen.json +1 -0
  74. package/dist/.pikku/variables/pikku-variables.gen.d.ts +11 -1
  75. package/dist/.pikku/variables/pikku-variables.gen.js +13 -3
  76. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +48 -6
  77. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +4 -1
  78. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  79. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  80. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  81. package/dist/bin/pikku-bin.mjs +2 -2
  82. package/dist/src/cli.wiring.js +47 -4
  83. package/dist/src/deploy/analyzer/analyzer.js +6 -0
  84. package/dist/src/fabric/fabric-commands.d.ts +3 -3
  85. package/dist/src/fabric/functions/llm-key.function.d.ts +4 -4
  86. package/dist/src/functions/commands/bootstrap.js +3 -0
  87. package/dist/src/functions/commands/dev.js +14 -3
  88. package/dist/src/functions/commands/enable.d.ts +1 -0
  89. package/dist/src/functions/commands/enable.js +10 -5
  90. package/dist/src/functions/commands/import-n8n.d.ts +10 -0
  91. package/dist/src/functions/commands/import-n8n.js +130 -0
  92. package/dist/src/functions/commands/info.js +0 -13
  93. package/dist/src/functions/commands/new-addon.js +33 -35
  94. package/dist/src/functions/commands/pikku-command-bootstrap.js +6 -0
  95. package/dist/src/functions/commands/scopes-audit.d.ts +1 -0
  96. package/dist/src/functions/commands/scopes-audit.js +37 -0
  97. package/dist/src/functions/commands/scopes-prune.d.ts +14 -0
  98. package/dist/src/functions/commands/scopes-prune.js +50 -0
  99. package/dist/src/functions/commands/scopes-shared.d.ts +39 -0
  100. package/dist/src/functions/commands/scopes-shared.js +83 -0
  101. package/dist/src/functions/commands/serve.js +4 -2
  102. package/dist/src/functions/commands/skills.js +18 -10
  103. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.js +2 -1
  104. package/dist/src/functions/wirings/console/serialize-console-functions.js +6 -0
  105. package/dist/src/functions/wirings/credentials/serialize-credentials-types.js +22 -0
  106. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.js +1 -1
  107. package/dist/src/functions/wirings/functions/pikku-command-function-types.js +2 -2
  108. package/dist/src/functions/wirings/functions/serialize-function-types.d.ts +1 -1
  109. package/dist/src/functions/wirings/functions/serialize-function-types.js +14 -16
  110. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.d.ts +1 -1
  111. package/dist/src/functions/wirings/functions/serialize-pikku-types-hub.js +6 -2
  112. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -0
  113. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.js +21 -0
  114. package/dist/src/functions/wirings/graph/serialize-graph-wirings.d.ts +5 -0
  115. package/dist/src/functions/wirings/graph/serialize-graph-wirings.js +14 -0
  116. package/dist/src/functions/wirings/http/serialize-http-types.js +2 -30
  117. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +1 -0
  118. package/dist/src/functions/wirings/package/pikku-command-package-types.js +14 -1
  119. package/dist/src/functions/wirings/package/serialize-package-types.d.ts +1 -0
  120. package/dist/src/functions/wirings/package/serialize-package-types.js +5 -0
  121. package/dist/src/functions/wirings/permissions/pikku-command-permissions.js +1 -3
  122. package/dist/src/functions/wirings/permissions/serialize-permissions-imports.d.ts +6 -1
  123. package/dist/src/functions/wirings/permissions/serialize-permissions-imports.js +7 -64
  124. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +5 -0
  125. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.js +20 -0
  126. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.d.ts +1 -0
  127. package/dist/src/functions/wirings/rpc/serialize-typed-rpc-map.js +8 -3
  128. package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +7 -0
  129. package/dist/src/functions/wirings/scopes/pikku-command-scopes.js +34 -0
  130. package/dist/src/functions/wirings/scopes/serialize-scopes-types.d.ts +15 -0
  131. package/dist/src/functions/wirings/scopes/serialize-scopes-types.js +86 -0
  132. package/dist/src/functions/wirings/secrets/serialize-secrets-types.js +13 -0
  133. package/dist/src/functions/wirings/variables/serialize-variables-types.js +15 -2
  134. package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -0
  135. package/dist/src/functions/wirings/webhook/pikku-command-webhook.js +25 -0
  136. package/dist/src/functions/wirings/webhook/serialize-webhook.d.ts +14 -0
  137. package/dist/src/functions/wirings/webhook/serialize-webhook.js +34 -0
  138. package/dist/src/functions/wirings/workflow/serialize-workflow-routes.js +29 -0
  139. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +3 -0
  140. package/dist/src/functions/workflows/all.workflow.js +23 -3
  141. package/dist/src/services.d.ts +1 -0
  142. package/dist/src/services.js +1 -0
  143. package/dist/src/utils/pikku-cli-config.js +20 -0
  144. package/dist/tsconfig.tsbuildinfo +1 -1
  145. package/package.json +9 -8
  146. package/skills/pikku-addon/SKILL.md +7 -3
  147. package/skills/pikku-ai-agent/SKILL.md +6 -3
  148. package/skills/pikku-ai-vercel/SKILL.md +6 -3
  149. package/skills/pikku-ai-voice/SKILL.md +6 -3
  150. package/skills/pikku-audit/SKILL.md +10 -3
  151. package/skills/pikku-aws/SKILL.md +9 -5
  152. package/skills/pikku-backblaze/SKILL.md +4 -3
  153. package/skills/pikku-better-auth/SKILL.md +10 -5
  154. package/skills/pikku-cli/SKILL.md +6 -3
  155. package/skills/pikku-concepts/SKILL.md +9 -4
  156. package/skills/pikku-concepts/references/concept-mapping.md +12 -10
  157. package/skills/pikku-config/SKILL.md +9 -5
  158. package/skills/pikku-cron/SKILL.md +6 -3
  159. package/skills/pikku-deploy-azure/SKILL.md +5 -3
  160. package/skills/pikku-deploy-cloudflare/SKILL.md +5 -3
  161. package/skills/pikku-deploy-express/SKILL.md +6 -3
  162. package/skills/pikku-deploy-fastify/SKILL.md +6 -3
  163. package/skills/pikku-deploy-lambda/SKILL.md +6 -3
  164. package/skills/pikku-deploy-nextjs/SKILL.md +5 -3
  165. package/skills/pikku-deploy-uws/SKILL.md +7 -4
  166. package/skills/pikku-deps/SKILL.md +13 -6
  167. package/skills/pikku-emails/SKILL.md +10 -5
  168. package/skills/pikku-feature/SKILL.md +1 -1
  169. package/skills/pikku-gateway-slack/SKILL.md +6 -3
  170. package/skills/pikku-http/SKILL.md +15 -21
  171. package/skills/pikku-http/references/http-options.md +0 -2
  172. package/skills/pikku-info/SKILL.md +9 -4
  173. package/skills/pikku-jose/SKILL.md +6 -3
  174. package/skills/pikku-kysely/SKILL.md +13 -5
  175. package/skills/pikku-machine-auth/SKILL.md +9 -3
  176. package/skills/pikku-mcp/SKILL.md +7 -3
  177. package/skills/pikku-middleware/SKILL.md +11 -6
  178. package/skills/pikku-mongodb/SKILL.md +8 -5
  179. package/skills/pikku-n8n-import/SKILL.md +109 -0
  180. package/skills/pikku-n8n-import/SPEC.md +84 -0
  181. package/skills/pikku-n8n-import/references/addon-mapping.md +121 -0
  182. package/skills/pikku-n8n-import/references/code-translation.md +121 -0
  183. package/skills/pikku-n8n-import/references/loops-and-control.md +87 -0
  184. package/skills/pikku-permissions/SKILL.md +26 -15
  185. package/skills/pikku-pino/SKILL.md +5 -3
  186. package/skills/pikku-product-second-opinion/README.md +43 -0
  187. package/skills/pikku-product-second-opinion/SKILL.md +158 -0
  188. package/skills/pikku-product-second-opinion/example/sample-report.md +90 -0
  189. package/skills/pikku-product-second-opinion/references/report-template.md +73 -0
  190. package/skills/pikku-queue/SKILL.md +7 -4
  191. package/skills/pikku-redis/SKILL.md +9 -6
  192. package/skills/pikku-rpc/SKILL.md +7 -4
  193. package/skills/pikku-rtl/SKILL.md +1 -1
  194. package/skills/pikku-scenario/SKILL.md +215 -0
  195. package/skills/pikku-schedule/SKILL.md +6 -3
  196. package/skills/pikku-schema-ajv/SKILL.md +5 -3
  197. package/skills/pikku-schema-cfworker/SKILL.md +6 -3
  198. package/skills/pikku-security/SKILL.md +8 -4
  199. package/skills/pikku-services/SKILL.md +8 -4
  200. package/skills/pikku-software-archaeology/README.md +70 -0
  201. package/skills/pikku-software-archaeology/SKILL.md +186 -0
  202. package/skills/pikku-software-archaeology/references/blueprint.schema.json +625 -0
  203. package/skills/pikku-software-archaeology/references/pikku-mapping.md +49 -0
  204. package/skills/pikku-software-archaeology/scripts/validate.mjs +173 -0
  205. package/skills/pikku-template-clone/SKILL.md +1 -1
  206. package/skills/pikku-trigger/SKILL.md +7 -3
  207. package/skills/pikku-versioning/SKILL.md +7 -3
  208. package/skills/pikku-websocket/SKILL.md +8 -4
  209. package/skills/pikku-workflow/SKILL.md +7 -3
  210. package/skills/pikku-ws/SKILL.md +5 -3
  211. package/skills/pikku-n8n-addon-map/SKILL.md +0 -178
  212. package/skills/pikku-n8n-code-translate/SKILL.md +0 -166
  213. package/skills/pikku-testing/SKILL.md +0 -328
  214. package/skills/pikku-testing/references/cucumber-bdd-testing.md +0 -176
@@ -24,6 +24,8 @@ export const serializeVariablesTypes = ({ definitions, schemaLookup, variablesFi
24
24
  const imports = [];
25
25
  imports.push(`import { TypedVariablesService as CoreTypedVariablesService, type VariableMeta } from '@pikku/core/services'`);
26
26
  imports.push(`import type { VariablesService } from '@pikku/core/services'`);
27
+ imports.push(`import type { VariableDefinitionsMeta } from '@pikku/core/variable'`);
28
+ imports.push(`import variablesMeta from './pikku-variables-meta.gen.json' with { type: 'json' }`);
27
29
  if (needsZod) {
28
30
  imports.push(`import type { z } from 'zod'`);
29
31
  }
@@ -34,19 +36,30 @@ export const serializeVariablesTypes = ({ definitions, schemaLookup, variablesFi
34
36
  }
35
37
  return `${imports.join('\n')}
36
38
 
39
+ /**
40
+ * Every variable declared in this package.
41
+ *
42
+ * Read from the metadata sidecar rather than inlined, so that the import above
43
+ * forces tsc to emit the .json alongside this file. An addon publishes only its
44
+ * compiled output, and a host reads that .json to discover the addon's declared
45
+ * variables — an uncopied sidecar leaves them invisible to the host.
46
+ */
47
+ export const VARIABLES_META: VariableDefinitionsMeta =
48
+ variablesMeta as VariableDefinitionsMeta
49
+
37
50
  export interface VariablesMap {
38
51
  ${mapEntries.join('\n')}
39
52
  }
40
53
 
41
54
  export type VariableId = keyof VariablesMap
42
55
 
43
- const VARIABLES_META: Record<string, VariableMeta> = {
56
+ const TYPED_VARIABLES_META: Record<string, VariableMeta> = {
44
57
  ${metaEntries.join(',\n')}
45
58
  }
46
59
 
47
60
  export class TypedVariablesService extends CoreTypedVariablesService<VariablesMap> {
48
61
  constructor(variables: VariablesService) {
49
- super(variables, VARIABLES_META)
62
+ super(variables, TYPED_VARIABLES_META)
50
63
  }
51
64
  }
52
65
  `;
@@ -0,0 +1 @@
1
+ export declare const pikkuWebhook: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
@@ -0,0 +1,25 @@
1
+ import { pikkuSessionlessFunc } from '#pikku';
2
+ import { getFileImportRelativePath } from '../../../utils/file-import-path.js';
3
+ import { writeFileInDir } from '../../../utils/file-writer.js';
4
+ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-time.js';
5
+ import { serializeWebhook } from './serialize-webhook.js';
6
+ export const pikkuWebhook = pikkuSessionlessFunc({
7
+ func: async ({ logger, config, variables }) => {
8
+ const deployCodegenFlag = await variables.get('PIKKU_DEPLOY_CODEGEN');
9
+ if (deployCodegenFlag === '1') {
10
+ return false;
11
+ }
12
+ if (config.webhookWorkersFile) {
13
+ const pathToPikkuTypes = getFileImportRelativePath(config.webhookWorkersFile, config.typesDeclarationFile, config.packageMappings);
14
+ await writeFileInDir(logger, config.webhookWorkersFile, serializeWebhook(pathToPikkuTypes));
15
+ return true;
16
+ }
17
+ return false;
18
+ },
19
+ middleware: [
20
+ logCommandInfoAndTime({
21
+ commandStart: 'Generating Webhook Workers',
22
+ commandEnd: 'Generated Webhook Workers',
23
+ }),
24
+ ],
25
+ });
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Generate the outgoing webhook delivery queue worker.
3
+ *
4
+ * The payload type is an inline TS literal (not zod): the inspector imports a
5
+ * zod schema's declaring module at codegen time, and the wiring file's
6
+ * pikku-types import can go stale between deploy per-unit codegen runs, which
7
+ * would fail schema generation before the wiring gets rewritten. TS-based
8
+ * schema generation goes through the type checker instead, so it never
9
+ * imports this file.
10
+ *
11
+ * The handler is inlined: it is wired exactly once, so a named export would
12
+ * only be indirection.
13
+ */
14
+ export declare const serializeWebhook: (pathToPikkuTypes: string) => string;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Generate the outgoing webhook delivery queue worker.
3
+ *
4
+ * The payload type is an inline TS literal (not zod): the inspector imports a
5
+ * zod schema's declaring module at codegen time, and the wiring file's
6
+ * pikku-types import can go stale between deploy per-unit codegen runs, which
7
+ * would fail schema generation before the wiring gets rewritten. TS-based
8
+ * schema generation goes through the type checker instead, so it never
9
+ * imports this file.
10
+ *
11
+ * The handler is inlined: it is wired exactly once, so a named export would
12
+ * only be indirection.
13
+ */
14
+ export const serializeWebhook = (pathToPikkuTypes) => {
15
+ return `/**
16
+ * Auto-generated outgoing webhook delivery queue worker
17
+ * Do not edit manually - regenerate with 'npx pikku'
18
+ */
19
+ import { pikkuSessionlessFunc, wireQueueWorker } from '${pathToPikkuTypes}'
20
+ import { pikkuWebhookWorkerFunc } from '@pikku/core/services'
21
+
22
+ wireQueueWorker({
23
+ name: 'pikku-outgoing-webhooks',
24
+ tags: ['pikku'],
25
+ func: pikkuSessionlessFunc<
26
+ { url: string, event?: string, body: string, headers: Record<string, string>, deliveryId?: string },
27
+ void
28
+ >({
29
+ tags: ['pikku'],
30
+ func: async (services, data) => pikkuWebhookWorkerFunc(services, data),
31
+ }),
32
+ })
33
+ `;
34
+ };
@@ -252,6 +252,30 @@ export const graphStarter = pikkuSessionlessFunc<
252
252
  },
253
253
  })
254
254
 
255
+ /**
256
+ * Record a human decision against a workflow.approval() gate and wake the run.
257
+ *
258
+ * The decision is validated on replay inside the workflow body — the only place
259
+ * the approval's schema value is in scope — so this route deliberately accepts
260
+ * an unknown payload. An invalid one re-closes the gate rather than failing the
261
+ * run. Gate this route with your own auth/permissions to control WHO may
262
+ * approve: the framework does not model approver identity.
263
+ */
264
+ export const workflowApprover = pikkuSessionlessFunc<
265
+ { workflowName: string; runId: string; reason: string; decision: unknown },
266
+ { ok: true }
267
+ >({
268
+ tags: ['pikku'],
269
+ auth: ${authFlag},
270
+ // See workflowStarter — destructure workflowService so the analyzer
271
+ // assigns workflow-state capability to this unit.
272
+ func: async ({ workflowService }, { runId, reason, decision }) => {
273
+ assertWorkflowService(workflowService)
274
+ await workflowService.approveStep(runId, reason, decision)
275
+ return { ok: true }
276
+ },
277
+ })
278
+
255
279
  wireHTTPRoutes({
256
280
  tags: ['pikku'],
257
281
  auth: ${authFlag},
@@ -261,6 +285,11 @@ wireHTTPRoutes({
261
285
  method: 'post',
262
286
  func: workflowStarter,
263
287
  },
288
+ workflowApprove: {
289
+ route: '/workflow/:workflowName/approve/:runId',
290
+ method: 'post',
291
+ func: workflowApprover,
292
+ },
264
293
  workflowRun: {
265
294
  route: '/workflow/:workflowName/run',
266
295
  method: 'post',
@@ -182,6 +182,7 @@ type RefFunction<FuncMap extends Record<string, string>> = {
182
182
  nodeId: N,
183
183
  path: NodeOutputKeys<FuncMap, N>
184
184
  ): TypedRef<unknown>
185
+ <N extends Extract<keyof FuncMap, string>>(nodeId: N): TypedRef<unknown>
185
186
  (nodeId: 'trigger' | '$item', path?: string): TypedRef<unknown>
186
187
  }
187
188
 
@@ -195,6 +196,8 @@ type GraphNodeConfigMap<FuncMap extends Record<string, string>> = {
195
196
  | (() => NodeInputType<FuncMap, K>)
196
197
  | ((ref: RefFunction<FuncMap>, template: TemplateFunction) => NodeInputType<FuncMap, K>)
197
198
  onError?: Extract<keyof FuncMap, string> | Extract<keyof FuncMap, string>[]
199
+ /** Free-text node documentation. Non-semantic — excluded from graphHash. */
200
+ notes?: string
198
201
  }
199
202
  }
200
203
 
@@ -4,6 +4,11 @@ import { assertSingleCoreVersion } from '../../utils/assert-single-core-version.
4
4
  import { PikkuTypecheckFailedError, renderTscFull, renderTscSummary, runProjectTypecheck, } from '../../utils/tsc-check.js';
5
5
  const scaffoldFiles = (config) => {
6
6
  const files = [];
7
+ if (config.scaffold?.graph && config.graphWiringsFile)
8
+ files.push({
9
+ file: config.graphWiringsFile,
10
+ generator: 'pikkuGraphWirings',
11
+ });
7
12
  if (config.scaffold?.rpc && config.publicRpcFile)
8
13
  files.push({ file: config.publicRpcFile, generator: 'pikkuPublicRPC' });
9
14
  if (config.scaffold?.console && config.consoleFunctionsFile)
@@ -39,6 +44,12 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
39
44
  if (!existsSync(config.outDir)) {
40
45
  logger.debug(`• .pikku directory not found, running bootstrap first...`);
41
46
  await workflow.do('Bootstrap inspect', async () => getInspectorState(false, true, true));
47
+ // Both before function types: pikku-types.gen.ts re-exports the scope
48
+ // definition types and imports ScopeId from the scopes codegen, so any
49
+ // later import of '#pikku' — the inspector reading a project's zod
50
+ // schemas, for one — fails until these two files exist.
51
+ await workflow.do('Bootstrap scope definition types', 'pikkuScopeDefinitionTypes', null);
52
+ await workflow.do('Bootstrap scopes', 'pikkuScopes', { bootstrap: true });
42
53
  await workflow.do('Bootstrap function types split', 'pikkuFunctionTypesSplit', { bootstrap: true });
43
54
  // Pre-write a stub auth.types.ts (if the project uses better-auth) so the
44
55
  // pikkuBetterAuth re-export resolves before any user file is imported.
@@ -129,6 +140,7 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
129
140
  }
130
141
  // Scaffold and definition generators are all independent
131
142
  await Promise.all([
143
+ workflow.do('Graph wirings', 'pikkuGraphWirings', null),
132
144
  workflow.do('Public RPC', 'pikkuPublicRPC', null),
133
145
  workflow.do('Console functions', 'pikkuConsoleFunctions', null),
134
146
  workflow.do('Scenario functions', 'pikkuScenarioFunctions', null),
@@ -138,6 +150,8 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
138
150
  workflow.do('Auth', 'pikkuAuth', {}),
139
151
  workflow.do('Secrets', 'pikkuSecrets', null),
140
152
  workflow.do('Credentials', 'pikkuCredentials', null),
153
+ workflow.do('Scope definition types', 'pikkuScopeDefinitionTypes', null),
154
+ workflow.do('Scopes', 'pikkuScopes', {}),
141
155
  workflow.do('Variable definition types', 'pikkuVariableDefinitionTypes', null),
142
156
  workflow.do('Variables', 'pikkuVariables', null),
143
157
  workflow.do('Addon types', 'pikkuAddonTypes', null),
@@ -164,22 +178,28 @@ export const allWorkflow = pikkuWorkflowComplexFunc({
164
178
  if (schemas) {
165
179
  allImports.push(`${config.schemaDirectory}/register.gen.ts`);
166
180
  }
167
- const [, , workflows] = await Promise.all([
181
+ const [, , , workflows] = await Promise.all([
168
182
  workflow.do('RPC internal map', 'pikkuRPCInternalMap', null),
169
183
  workflow.do('RPC exposed map', 'pikkuRPCExposedMap', null),
184
+ workflow.do('RPC remote map', 'pikkuRPCRemoteMap', null),
170
185
  workflow.do('Workflow', 'pikkuWorkflow', null),
171
186
  ]);
172
187
  let remoteRPC = false;
188
+ let webhook = false;
173
189
  let workflowRoutes = false;
174
190
  if (!config.addon) {
175
191
  remoteRPC = await workflow.do('Remote RPC', 'pikkuRemoteRPC', null);
192
+ webhook = await workflow.do('Webhook', 'pikkuWebhook', null);
176
193
  if (workflows) {
177
194
  workflowRoutes = await workflow.do('Workflow routes', 'pikkuWorkflowRoutes', null);
178
195
  }
179
196
  }
180
- if (workflows || remoteRPC || workflowRoutes) {
197
+ if (workflows || remoteRPC || webhook || workflowRoutes) {
181
198
  await workflow.do('Re-inspect after workflows', async () => getInspectorState(true));
182
- await workflow.do('Re-generate schemas', 'pikkuSchemas', null);
199
+ const regeneratedSchemas = await workflow.do('Re-generate schemas', 'pikkuSchemas', null);
200
+ if (regeneratedSchemas && !schemas) {
201
+ allImports.push(`${config.schemaDirectory}/register.gen.ts`);
202
+ }
183
203
  }
184
204
  if (!config.addon) {
185
205
  const [http, scheduler, triggers] = await Promise.all([
@@ -14,6 +14,7 @@ export declare const defaultCLIRenderer: import("@pikku/core/cli").CorePikkuCLIR
14
14
  logLevel?: LogLevel;
15
15
  secrets?: {};
16
16
  workflow?: import("@pikku/core/workflow").WorkflowServiceConfig;
17
+ webhook?: import("@pikku/core/services").WebhookServiceConfig;
17
18
  postgres?: import("@pikku/core").PostgresConfig;
18
19
  }>, import("@pikku/core").CoreUserSession>;
19
20
  export declare const createConfig: CreateConfig<Config, [PikkuCLIConfig]>;
@@ -204,6 +204,7 @@ export const createSingletonServices = async (config) => {
204
204
  const scaffoldFiles = [
205
205
  config.consoleFunctionsFile,
206
206
  config.remoteRpcWorkersFile,
207
+ config.webhookWorkersFile,
207
208
  config.workflowRoutesFile,
208
209
  config.publicRpcFile,
209
210
  config.publicAgentFile,
@@ -195,6 +195,9 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
195
195
  if (!result.rpcMapDeclarationFile) {
196
196
  result.rpcMapDeclarationFile = join(rpcDir, 'pikku-rpc-wirings-map.gen.d.ts');
197
197
  }
198
+ if (!result.rpcRemoteMapDeclarationFile) {
199
+ result.rpcRemoteMapDeclarationFile = join(rpcDir, 'pikku-rpc-wirings-map.remote.gen.d.ts');
200
+ }
198
201
  // Scaffold directory for auto-generated wiring files. Default it beside the
199
202
  // first source directory (so a monorepo's scaffold lands in the functions
200
203
  // package where its deps — e.g. zod — resolve), not rootDir-relative
@@ -209,6 +212,12 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
209
212
  if (result.scaffold?.remoteRpc && !result.remoteRpcWorkersFile) {
210
213
  result.remoteRpcWorkersFile = join(resolvedScaffoldDir, 'rpc-remote.gen.ts');
211
214
  }
215
+ if (result.scaffold?.graph && !result.graphWiringsFile) {
216
+ result.graphWiringsFile = join(resolvedScaffoldDir, 'graph.wirings.gen.ts');
217
+ }
218
+ if (result.scaffold?.webhook && !result.webhookWorkersFile) {
219
+ result.webhookWorkersFile = join(resolvedScaffoldDir, 'webhook.gen.ts');
220
+ }
212
221
  if (result.scaffold?.workflow && !result.workflowRoutesFile) {
213
222
  result.workflowRoutesFile = join(resolvedScaffoldDir, 'workflow-routes.gen.ts');
214
223
  }
@@ -423,6 +432,17 @@ const _getPikkuCLIConfig = async (logger, configFile = undefined, requiredFields
423
432
  if (!result.credentialsMetaJsonFile) {
424
433
  result.credentialsMetaJsonFile = join(credentialsDir, 'pikku-credentials-meta.gen.json');
425
434
  }
435
+ // Scopes (ScopeId union + declared scope set)
436
+ const scopesDir = join(result.outDir, 'scopes');
437
+ if (!result.scopeTypesFile) {
438
+ result.scopeTypesFile = join(scopesDir, 'pikku-scope-types.gen.ts');
439
+ }
440
+ if (!result.scopesFile) {
441
+ result.scopesFile = join(scopesDir, 'pikku-scopes.gen.ts');
442
+ }
443
+ if (!result.scopesMetaJsonFile) {
444
+ result.scopesMetaJsonFile = join(scopesDir, 'pikku-scopes-meta.gen.json');
445
+ }
426
446
  // Variables (typed wrapper for VariablesService)
427
447
  const variablesDir = join(result.outDir, 'variables');
428
448
  if (!result.variableTypesFile) {
@@ -1 +1 @@
1
- {"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/provider-adapter.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/analyzer/manifest.ts","../src/deploy/bundler/bun-bundler.ts","../src/deploy/bundler/bundler.interface.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/node-bundler.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/add.function.ts","../src/fabric/functions/addon-verify.function.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/publish.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/smoke.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/stage.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/audit.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/bun-coverage-loader.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-generate.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-seed.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev-ai-runner.ts","../src/functions/commands/dev.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/info.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/login.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/scenario.ts","../src/functions/commands/serve-console.ts","../src/functions/commands/serve.ts","../src/functions/commands/skills.ts","../src/functions/commands/start-coverage.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/watch.ts","../src/functions/commands/workspace-validate.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/better-auth-schema.ts","../src/functions/db/coercion-plugin.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/pglite-kysely.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/validate/workspace-validate.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent-types.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent.ts","../src/functions/wirings/ai-agent/pikku-command-public-agent.ts","../src/functions/wirings/ai-agent/serialize-agent-map.ts","../src/functions/wirings/ai-agent/serialize-ai-agent-types.ts","../src/functions/wirings/ai-agent/serialize-public-agent.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-node-types.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/console/serialize-node-types.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-function-types.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-refs.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-pikku-types-hub.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/gateway/serialize-gateway-meta.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scenarios/pikku-command-scenario-functions.ts","../src/functions/wirings/scenarios/serialize-scenario-functions.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-scenario-actors.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/scaffold/rpc-remote.gen.ts","../src/server/bun-server-runner.ts","../src/server/dev-server-runner.interface.ts","../src/server/node-server-runner.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/assert-single-core-version.ts","../src/utils/check-required-types.ts","../src/utils/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/detect-better-auth.ts","../src/utils/device-auth.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/meta-diff.ts","../src/utils/parse-cli-filters.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/precise-coverage-map.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../src/utils/tsc-check.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-meta-service.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/pikku-types.gen.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/console/pikku-node-types.gen.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/http/pikku-http-wirings-map.gen.d.ts","../.pikku/http/pikku-http-wirings-meta.gen.ts","../.pikku/http/pikku-http-wirings.gen.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"6.0.3"}
1
+ {"root":["../bin/pikku.ts","../src/cli.wiring.ts","../src/services.ts","../src/deploy/build-pipeline.ts","../src/deploy/provider-adapter.ts","../src/deploy/server-entry.ts","../src/deploy/analyzer/analyzer.ts","../src/deploy/analyzer/index.ts","../src/deploy/analyzer/manifest.ts","../src/deploy/bundler/bun-bundler.ts","../src/deploy/bundler/bundler.interface.ts","../src/deploy/bundler/bundler.ts","../src/deploy/bundler/dep-extractor.ts","../src/deploy/bundler/index.ts","../src/deploy/bundler/node-bundler.ts","../src/deploy/bundler/types.ts","../src/deploy/codegen/index.ts","../src/deploy/codegen/per-unit-codegen.ts","../src/deploy/plan/executor.ts","../src/deploy/plan/formatter.ts","../src/deploy/plan/index.ts","../src/deploy/plan/planner.ts","../src/deploy/plan/provider.ts","../src/deploy/plan/types.ts","../src/fabric/fabric-commands.ts","../src/fabric/functions/add.function.ts","../src/fabric/functions/addon-verify.function.ts","../src/fabric/functions/db-schema.function.ts","../src/fabric/functions/deploy-list.function.ts","../src/fabric/functions/deploy-units.function.ts","../src/fabric/functions/deploy.function.ts","../src/fabric/functions/domains-add.function.ts","../src/fabric/functions/domains-list.function.ts","../src/fabric/functions/domains-remove.function.ts","../src/fabric/functions/errors.function.ts","../src/fabric/functions/init.function.ts","../src/fabric/functions/link.function.ts","../src/fabric/functions/llm-key.function.ts","../src/fabric/functions/login.function.ts","../src/fabric/functions/logs.function.ts","../src/fabric/functions/metrics.function.ts","../src/fabric/functions/publish.function.ts","../src/fabric/functions/rollback.function.ts","../src/fabric/functions/secrets-list.function.ts","../src/fabric/functions/secrets-set.function.ts","../src/fabric/functions/smoke.function.ts","../src/fabric/functions/status.function.ts","../src/fabric/functions/trace.function.ts","../src/fabric/functions/validate.function.ts","../src/fabric/lib/config.ts","../src/fabric/lib/console-url.ts","../src/fabric/lib/git.ts","../src/fabric/lib/http.ts","../src/fabric/lib/not-implemented.ts","../src/fabric/lib/output.ts","../src/fabric/lib/prompt.ts","../src/fabric/lib/stage.ts","../src/fabric/sdk/http-map.gen.d.ts","../src/fabric/sdk/pikku-fetch.gen.ts","../src/fabric/sdk/pikku-rpc.gen.ts","../src/fabric/sdk/rpc-map.gen.d.ts","../src/functions/commands/all.ts","../src/functions/commands/audit.ts","../src/functions/commands/binary.ts","../src/functions/commands/bootstrap.ts","../src/functions/commands/bun-coverage-loader.ts","../src/functions/commands/db-audit.ts","../src/functions/commands/db-generate.ts","../src/functions/commands/db-migrate.ts","../src/functions/commands/db-reset.ts","../src/functions/commands/db-seed.ts","../src/functions/commands/db-shared.ts","../src/functions/commands/deploy-apply.ts","../src/functions/commands/deploy-info.ts","../src/functions/commands/deploy-plan.ts","../src/functions/commands/dev-ai-runner.ts","../src/functions/commands/dev.ts","../src/functions/commands/emails-init.ts","../src/functions/commands/enable.ts","../src/functions/commands/import-n8n.ts","../src/functions/commands/info.ts","../src/functions/commands/load-user-project.ts","../src/functions/commands/login.ts","../src/functions/commands/meta.ts","../src/functions/commands/new-addon.ts","../src/functions/commands/new-function.ts","../src/functions/commands/new-middleware.ts","../src/functions/commands/new-permission.ts","../src/functions/commands/new-wiring.ts","../src/functions/commands/pikku-command-bootstrap.ts","../src/functions/commands/pikku-command-summary.ts","../src/functions/commands/scenario.ts","../src/functions/commands/scopes-audit.ts","../src/functions/commands/scopes-prune.ts","../src/functions/commands/scopes-shared.ts","../src/functions/commands/serve-console.ts","../src/functions/commands/serve.ts","../src/functions/commands/skills.ts","../src/functions/commands/start-coverage.ts","../src/functions/commands/versions-check.ts","../src/functions/commands/versions-init.ts","../src/functions/commands/versions-update.ts","../src/functions/commands/watch.ts","../src/functions/commands/workspace-validate.ts","../src/functions/db/annotation-parser.ts","../src/functions/db/better-auth-schema.ts","../src/functions/db/coercion-plugin.ts","../src/functions/db/db-codegen.ts","../src/functions/db/db-introspector.ts","../src/functions/db/db-migrator.ts","../src/functions/db/local-db.ts","../src/functions/db/zod-codegen.ts","../src/functions/db/postgres/pglite-kysely.ts","../src/functions/db/postgres/postgres-introspector.ts","../src/functions/db/postgres/postgres-migrator.ts","../src/functions/db/sqlite/seed.ts","../src/functions/db/sqlite/sqlite-introspector.ts","../src/functions/db/sqlite/sqlite-kysely.ts","../src/functions/db/sqlite/sqlite-migrator.ts","../src/functions/db/sqlite/sqlite-runtime-bun.ts","../src/functions/db/sqlite/sqlite-runtime-node.ts","../src/functions/db/sqlite/sqlite-runtime.ts","../src/functions/runtimes/fetch/index.ts","../src/functions/runtimes/nextjs/pikku-command-nextjs.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-worker-rpc-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-backend-wrapper.ts","../src/functions/runtimes/nextjs/serialize-nextjs-http-wrapper.ts","../src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.ts","../src/functions/runtimes/tanstack-start/serialize-tanstack-start-shim.ts","../src/functions/runtimes/websocket/pikku-command-websocket-typed.ts","../src/functions/runtimes/websocket/serialize-websocket-wrapper.ts","../src/functions/validate/workspace-validate.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent-types.ts","../src/functions/wirings/ai-agent/pikku-command-ai-agent.ts","../src/functions/wirings/ai-agent/pikku-command-public-agent.ts","../src/functions/wirings/ai-agent/serialize-agent-map.ts","../src/functions/wirings/ai-agent/serialize-ai-agent-types.ts","../src/functions/wirings/ai-agent/serialize-public-agent.ts","../src/functions/wirings/auth/pikku-command-auth.ts","../src/functions/wirings/auth/serialize-auth-gen.ts","../src/functions/wirings/auth/serialize-auth-meta.ts","../src/functions/wirings/auth/serialize-auth-types.ts","../src/functions/wirings/channels/pikku-channels.ts","../src/functions/wirings/channels/pikku-command-channel-types.ts","../src/functions/wirings/channels/pikku-command-channels-map.ts","../src/functions/wirings/channels/pikku-command-channels.ts","../src/functions/wirings/channels/serialize-channel-types.ts","../src/functions/wirings/channels/serialize-typed-channel-map.ts","../src/functions/wirings/cli/pikku-command-cli-entry.ts","../src/functions/wirings/cli/pikku-command-cli-types.ts","../src/functions/wirings/cli/pikku-command-cli.ts","../src/functions/wirings/cli/serialize-channel-cli-client.ts","../src/functions/wirings/cli/serialize-channel-cli.ts","../src/functions/wirings/cli/serialize-cli-types.ts","../src/functions/wirings/cli/serialize-local-cli-bootstrap.ts","../src/functions/wirings/console/pikku-command-console-functions.ts","../src/functions/wirings/console/pikku-command-node-types.ts","../src/functions/wirings/console/pikku-command-nodes-meta.ts","../src/functions/wirings/console/serialize-console-functions.ts","../src/functions/wirings/console/serialize-node-types.ts","../src/functions/wirings/credentials/pikku-command-credentials.ts","../src/functions/wirings/credentials/serialize-credentials-types.ts","../src/functions/wirings/emails/pikku-command-emails.ts","../src/functions/wirings/emails/serialize-emails.ts","../src/functions/wirings/functions/pikku-command-addon-types.ts","../src/functions/wirings/functions/pikku-command-function-types-split.ts","../src/functions/wirings/functions/pikku-command-function-types.ts","../src/functions/wirings/functions/pikku-command-functions.ts","../src/functions/wirings/functions/pikku-command-services.ts","../src/functions/wirings/functions/schemas.ts","../src/functions/wirings/functions/serialize-addon-refs.ts","../src/functions/wirings/functions/serialize-addon-types.ts","../src/functions/wirings/functions/serialize-function-imports.ts","../src/functions/wirings/functions/serialize-function-types.ts","../src/functions/wirings/functions/serialize-pikku-types-hub.ts","../src/functions/wirings/gateway/pikku-command-gateway.ts","../src/functions/wirings/gateway/serialize-gateway-meta.ts","../src/functions/wirings/graph/pikku-command-graph-wirings.ts","../src/functions/wirings/graph/serialize-graph-wirings.ts","../src/functions/wirings/http/pikku-command-http-map.ts","../src/functions/wirings/http/pikku-command-http-routes.ts","../src/functions/wirings/http/pikku-command-http-types.ts","../src/functions/wirings/http/pikku-command-openapi.ts","../src/functions/wirings/http/pikku-http-routes.ts","../src/functions/wirings/http/serialize-fetch-wrapper.ts","../src/functions/wirings/http/serialize-http-types.ts","../src/functions/wirings/http/serialize-typed-http-map.ts","../src/functions/wirings/mcp/pikku-command-mcp-json.ts","../src/functions/wirings/mcp/pikku-command-mcp-types.ts","../src/functions/wirings/mcp/pikku-command-mcp.ts","../src/functions/wirings/mcp/serialize-mcp-types.ts","../src/functions/wirings/middleware/pikku-command-middleware.ts","../src/functions/wirings/middleware/serialize-middleware-imports.ts","../src/functions/wirings/package/pikku-command-package-types.ts","../src/functions/wirings/package/pikku-command-package.ts","../src/functions/wirings/package/serialize-package-types.ts","../src/functions/wirings/package/serialize-package.ts","../src/functions/wirings/permissions/pikku-command-permissions.ts","../src/functions/wirings/permissions/serialize-permissions-imports.ts","../src/functions/wirings/queue/pikku-command-queue-map.ts","../src/functions/wirings/queue/pikku-command-queue-service.ts","../src/functions/wirings/queue/pikku-command-queue-types.ts","../src/functions/wirings/queue/pikku-command-queue.ts","../src/functions/wirings/queue/pikku-queue-map.ts","../src/functions/wirings/queue/pikku-queue.ts","../src/functions/wirings/queue/serialize-queue-map.ts","../src/functions/wirings/queue/serialize-queue-meta.ts","../src/functions/wirings/queue/serialize-queue-types.ts","../src/functions/wirings/queue/serialize-queue-wrapper.ts","../src/functions/wirings/realtime/pikku-command-events-scaffold.ts","../src/functions/wirings/realtime/pikku-command-realtime.ts","../src/functions/wirings/realtime/serialize-events-scaffold.ts","../src/functions/wirings/realtime/serialize-realtime-client.ts","../src/functions/wirings/rpc/pikku-command-public-rpc.ts","../src/functions/wirings/rpc/pikku-command-react-query.ts","../src/functions/wirings/rpc/pikku-command-remote-rpc.ts","../src/functions/wirings/rpc/pikku-command-rpc-client.ts","../src/functions/wirings/rpc/pikku-command-rpc-map.ts","../src/functions/wirings/rpc/pikku-command-rpc.ts","../src/functions/wirings/rpc/serialize-public-rpc.ts","../src/functions/wirings/rpc/serialize-react-query-hooks.ts","../src/functions/wirings/rpc/serialize-remote-rpc.ts","../src/functions/wirings/rpc/serialize-rpc-wrapper.ts","../src/functions/wirings/rpc/serialize-typed-rpc-map.ts","../src/functions/wirings/scenarios/pikku-command-scenario-functions.ts","../src/functions/wirings/scenarios/serialize-scenario-functions.ts","../src/functions/wirings/scheduler/pikku-command-scheduler-types.ts","../src/functions/wirings/scheduler/pikku-command-scheduler.ts","../src/functions/wirings/scheduler/serialize-scheduler-meta.ts","../src/functions/wirings/scheduler/serialize-scheduler-types.ts","../src/functions/wirings/scopes/pikku-command-scopes.ts","../src/functions/wirings/scopes/serialize-scopes-types.ts","../src/functions/wirings/secrets/pikku-command-secrets.ts","../src/functions/wirings/secrets/serialize-secrets-types.ts","../src/functions/wirings/triggers/pikku-command-trigger-types.ts","../src/functions/wirings/triggers/pikku-command-trigger.ts","../src/functions/wirings/triggers/serialize-trigger-meta.ts","../src/functions/wirings/triggers/serialize-trigger-types.ts","../src/functions/wirings/variables/pikku-command-variables.ts","../src/functions/wirings/variables/serialize-variables-types.ts","../src/functions/wirings/webhook/pikku-command-webhook.ts","../src/functions/wirings/webhook/serialize-webhook.ts","../src/functions/wirings/workflow/pikku-command-workflow-routes.ts","../src/functions/wirings/workflow/pikku-command-workflow.ts","../src/functions/wirings/workflow/serialize-scenario-actors.ts","../src/functions/wirings/workflow/serialize-workflow-bootstrap-map.ts","../src/functions/wirings/workflow/serialize-workflow-map.ts","../src/functions/wirings/workflow/serialize-workflow-meta.ts","../src/functions/wirings/workflow/serialize-workflow-registration.ts","../src/functions/wirings/workflow/serialize-workflow-routes.ts","../src/functions/wirings/workflow/serialize-workflow-types.ts","../src/functions/workflows/all.workflow.ts","../src/middleware/log-command-info-and-time.ts","../src/scaffold/rpc-remote.gen.ts","../src/server/bun-server-runner.ts","../src/server/dev-server-runner.interface.ts","../src/server/node-server-runner.ts","../src/services/cli-logger-forwarder.service.ts","../src/services/cli-logger.service.ts","../src/utils/assert-single-core-version.ts","../src/utils/check-required-types.ts","../src/utils/cli-session.ts","../src/utils/command-summary.ts","../src/utils/contract-versions.ts","../src/utils/detect-better-auth.ts","../src/utils/device-auth.ts","../src/utils/file-import-path.ts","../src/utils/file-imports-serializer.ts","../src/utils/file-writer.ts","../src/utils/generate-bootstrap-file.ts","../src/utils/get-cli-version.ts","../src/utils/meta-diff.ts","../src/utils/parse-cli-filters.ts","../src/utils/pikku-cli-config.ts","../src/utils/pikku-files-and-methods.ts","../src/utils/precise-coverage-map.ts","../src/utils/serialize-import-map.ts","../src/utils/serialize-meta-ts.ts","../src/utils/serialize-schemas.ts","../src/utils/strip-verbose-meta.ts","../src/utils/tsc-check.ts","../.pikku/pikku-bootstrap.gen.ts","../.pikku/pikku-meta-service.gen.ts","../.pikku/pikku-services.gen.ts","../.pikku/pikku-types.gen.ts","../.pikku/agent/pikku-agent-map.gen.d.ts","../.pikku/agent/pikku-agent-types.gen.ts","../.pikku/channel/pikku-channel-types.gen.ts","../.pikku/cli/pikku-cli-channel.ts","../.pikku/cli/pikku-cli-client.gen.ts","../.pikku/cli/pikku-cli-contracts-meta.gen.ts","../.pikku/cli/pikku-cli-types.gen.ts","../.pikku/cli/pikku-cli-wirings-meta.gen.ts","../.pikku/cli/pikku-cli-wirings.gen.ts","../.pikku/cli/pikku-cli.gen.ts","../.pikku/console/pikku-node-types.gen.ts","../.pikku/function/pikku-function-types.gen.ts","../.pikku/function/pikku-functions-meta.gen.ts","../.pikku/function/pikku-functions.gen.ts","../.pikku/http/pikku-http-types.gen.ts","../.pikku/http/pikku-http-wirings-map.gen.d.ts","../.pikku/http/pikku-http-wirings-meta.gen.ts","../.pikku/http/pikku-http-wirings.gen.ts","../.pikku/mcp/pikku-mcp-types.gen.ts","../.pikku/node/pikku-node-types.gen.ts","../.pikku/queue/pikku-queue-types.gen.ts","../.pikku/queue/pikku-queue-workers-wirings-map.gen.d.ts","../.pikku/queue/pikku-queue-workers-wirings-meta.gen.ts","../.pikku/queue/pikku-queue-workers-wirings.gen.ts","../.pikku/rpc/pikku-rpc-wirings-map.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.internal.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-map.remote.gen.d.ts","../.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.ts","../.pikku/scheduler/pikku-scheduler-types.gen.ts","../.pikku/schemas/register.gen.ts","../.pikku/scopes/pikku-scope-types.gen.ts","../.pikku/scopes/pikku-scopes.gen.ts","../.pikku/secrets/pikku-secret-types.gen.ts","../.pikku/secrets/pikku-secrets.gen.ts","../.pikku/trigger/pikku-trigger-types.gen.ts","../.pikku/variables/pikku-variable-types.gen.ts","../.pikku/variables/pikku-variables.gen.ts","../.pikku/workflow/pikku-workflow-map.gen.d.ts","../.pikku/workflow/pikku-workflow-types.gen.ts","../.pikku/workflow/pikku-workflow-wirings-meta.gen.ts","../.pikku/workflow/pikku-workflow-wirings.gen.ts","../types/application-types.d.ts","../types/bun-sqlite.d.ts","../types/config.d.ts"],"version":"6.0.3"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pikku/cli",
3
- "version": "0.12.82",
3
+ "version": "0.12.83",
4
4
  "author": "yasser.fadl@gmail.com",
5
5
  "license": "BUSL-1.1",
6
6
  "imports": {
@@ -28,15 +28,16 @@
28
28
  "@electric-sql/pglite": "^0.5.1",
29
29
  "@jridgewell/trace-mapping": "^0.3.25",
30
30
  "@openapi-contrib/json-schema-to-openapi-schema": "^4.3.1",
31
- "@pikku/better-auth": "^0.12.17",
31
+ "@pikku/better-auth": "^0.12.18",
32
32
  "@pikku/bun-server": "^0.12.4",
33
33
  "@pikku/deploy-cloudflare": "^0.12.8",
34
- "@pikku/fetch": "^0.12.7",
35
- "@pikku/inspector": "^0.12.42",
36
- "@pikku/kysely": "^0.13.0",
34
+ "@pikku/fetch": "^0.12.8",
35
+ "@pikku/inspector": "^0.12.43",
36
+ "@pikku/kysely": "^0.13.1",
37
37
  "@pikku/kysely-node-sqlite": "^0.12.3",
38
+ "@pikku/n8n-import": "^0.0.2",
38
39
  "@pikku/node-http-server": "^0.12.6",
39
- "@pikku/openapi-parser": "^0.12.15",
40
+ "@pikku/openapi-parser": "^0.12.16",
40
41
  "@pikku/schedule": "^0.12.4",
41
42
  "@pikku/ws": "^0.12.4",
42
43
  "@types/cookie": "^1.0.0",
@@ -59,10 +60,10 @@
59
60
  "zod-to-ts": "^2.1.0"
60
61
  },
61
62
  "peerDependencies": {
62
- "@pikku/core": "^0.12.62"
63
+ "@pikku/core": "^0.12.64"
63
64
  },
64
65
  "devDependencies": {
65
- "@pikku/core": "^0.12.62",
66
+ "@pikku/core": "^0.12.64",
66
67
  "@types/istanbul-lib-instrument": "^1.7.7",
67
68
  "@types/node": "^24.11.0",
68
69
  "@types/pg": "^8.11.0",
@@ -1,8 +1,12 @@
1
1
  ---
2
2
  name: pikku-addon
3
- description: 'Use when creating or consuming reusable function packages (addons) in Pikku. Covers wireAddon, addon(), pikkuAddonServices, pikkuAddonWireServices, addon package structure, and cross-project function sharing.
4
- TRIGGER when: code uses wireAddon/addon()/pikkuAddonServices, user asks about addons, reusable function packages, cross-project sharing, or addon package structure.
5
- DO NOT TRIGGER when: user asks about internal function composition (use pikku-rpc) or general function definitions (use pikku-concepts).'
3
+ description: >-
4
+ Use when creating or consuming reusable function packages (addons) in Pikku. Covers wireAddon,
5
+ addon(), pikkuAddonServices, pikkuAddonWireServices, addon package structure, and cross-project
6
+ function sharing. TRIGGER when: code uses wireAddon/addon()/pikkuAddonServices, user asks about
7
+ addons, reusable function packages, cross-project sharing, or addon package structure. DO NOT
8
+ TRIGGER when: user asks about internal function composition (use pikku-rpc) or general function
9
+ definitions (use pikku-concepts).
6
10
  ---
7
11
 
8
12
  # Pikku Addons
@@ -1,8 +1,11 @@
1
1
  ---
2
2
  name: pikku-ai-agent
3
- description: 'Use when building AI agents, chatbots, or LLM-powered assistants with Pikku. Covers pikkuAIAgent, tool registration, memory, streaming, and agent invocation.
4
- TRIGGER when: code uses pikkuAIAgent/runAIAgent/streamAIAgent, user asks about AI agents, chatbots, LLM assistants, tool-calling agents, or agent memory/streaming.
5
- DO NOT TRIGGER when: user asks about MCP tool exposure (use pikku-mcp) or general function definitions (use pikku-concepts).'
3
+ description: >-
4
+ Use when building AI agents, chatbots, or LLM-powered assistants with Pikku. Covers
5
+ pikkuAIAgent, tool registration, memory, streaming, and agent invocation. TRIGGER when: code
6
+ uses pikkuAIAgent/runAIAgent/streamAIAgent, user asks about AI agents, chatbots, LLM assistants,
7
+ tool-calling agents, or agent memory/streaming. DO NOT TRIGGER when: user asks about MCP tool
8
+ exposure (use pikku-mcp) or general function definitions (use pikku-concepts).
6
9
  ---
7
10
 
8
11
  # Pikku AI Agent Wiring
@@ -1,8 +1,11 @@
1
1
  ---
2
2
  name: pikku-ai-vercel
3
- description: 'Use when setting up AI agent execution with the Vercel AI SDK in a Pikku app. Covers VercelAIAgentRunner for streaming and non-streaming AI agent steps.
4
- TRIGGER when: code uses VercelAIAgentRunner, user asks about Vercel AI SDK integration, AI agent runners, or @pikku/ai-vercel.
5
- DO NOT TRIGGER when: user asks about AI agent wiring (use pikku-ai-agent) or voice I/O (use pikku-ai-voice).'
3
+ description: >-
4
+ Use when setting up AI agent execution with the Vercel AI SDK in a Pikku app. Covers
5
+ VercelAIAgentRunner for streaming and non-streaming AI agent steps. TRIGGER when: code uses
6
+ VercelAIAgentRunner, user asks about Vercel AI SDK integration, AI agent runners, or
7
+ @pikku/ai-vercel. DO NOT TRIGGER when: user asks about AI agent wiring (use pikku-ai-agent) or
8
+ voice I/O (use pikku-ai-voice).
6
9
  ---
7
10
 
8
11
  # Pikku AI Vercel (Agent Runner)
@@ -1,8 +1,11 @@
1
1
  ---
2
2
  name: pikku-ai-voice
3
- description: 'Use when adding voice input (speech-to-text) or voice output (text-to-speech) to AI agents in a Pikku app. Covers voiceInput/voiceOutput middleware hooks and STT/TTS service interfaces.
4
- TRIGGER when: code uses voiceInput, voiceOutput, STTService, TTSService, or user asks about voice, speech-to-text, text-to-speech, or @pikku/ai-voice.
5
- DO NOT TRIGGER when: user asks about AI agent wiring (use pikku-ai-agent) or Vercel AI SDK (use pikku-ai-vercel).'
3
+ description: >-
4
+ Use when adding voice input (speech-to-text) or voice output (text-to-speech) to AI agents in a
5
+ Pikku app. Covers voiceInput/voiceOutput middleware hooks and STT/TTS service interfaces.
6
+ TRIGGER when: code uses voiceInput, voiceOutput, STTService, TTSService, or user asks about
7
+ voice, speech-to-text, text-to-speech, or @pikku/ai-voice. DO NOT TRIGGER when: user asks about
8
+ AI agent wiring (use pikku-ai-agent) or Vercel AI SDK (use pikku-ai-vercel).
6
9
  ---
7
10
 
8
11
  # Pikku AI Voice (Speech I/O)
@@ -1,8 +1,15 @@
1
1
  ---
2
2
  name: pikku-audit
3
- description: 'Use when adding audit / activity-history / change-tracking to a Pikku app, or when a function needs to record who changed what. Covers the built-in AuditService sink, the per-invocation auditLog buffer (createInvocationAudit / pikkuWireServices), the `audit: true` function flag, explicit `auditLog.write()` domain events, automatic query-level capture via createAuditedKysely, and the durable KyselyAuditService sink.
4
- TRIGGER when: user asks for an audit log, change history, activity feed, "who did this", or a custom audit/history table; code uses auditLog, createInvocationAudit, createAuditedKysely, or AuditService.
5
- DO NOT TRIGGER when: user wants app logging/telemetry (use the logger) or DB migrations in general (use pikku-kysely).'
3
+ description: >-
4
+ Use when adding audit / activity-history / change-tracking to a Pikku app, or when a function
5
+ needs to record who changed what. Covers the built-in AuditService sink, the per-invocation
6
+ auditLog buffer (createInvocationAudit / pikkuWireServices), the `audit: true` function flag,
7
+ explicit `auditLog.write()` domain events, automatic query-level capture via
8
+ createAuditedKysely, and the durable KyselyAuditService sink. TRIGGER when: user asks for an
9
+ audit log, change history, activity feed, "who did this", or a custom audit/history table; code
10
+ uses auditLog, createInvocationAudit, createAuditedKysely, or AuditService. DO NOT TRIGGER when:
11
+ user wants app logging/telemetry (use the logger) or DB migrations in general (use
12
+ pikku-kysely).
6
13
  installGroups: [core]
7
14
  ---
8
15
 
@@ -1,8 +1,11 @@
1
1
  ---
2
2
  name: pikku-aws
3
- description: 'Use when setting up AWS services (S3, SQS, Secrets Manager) in a Pikku app. Covers S3Content for file storage, SQSQueueService for queues, and AWSSecrets for secret management.
4
- TRIGGER when: code uses S3Content, SQSQueueService, AWSSecrets, or user asks about AWS integration, S3 uploads, SQS queues, or AWS Secrets Manager with Pikku.
5
- DO NOT TRIGGER when: user asks about AWS Lambda runtime (use pikku-deploy-lambda).'
3
+ description: >-
4
+ Use when setting up AWS services (S3, SQS, Secrets Manager) in a Pikku app. Covers S3Content for
5
+ file storage, SQSQueueService for queues, and AWSSecrets for secret management. TRIGGER when:
6
+ code uses S3Content, SQSQueueService, AWSSecrets, or user asks about AWS integration, S3
7
+ uploads, SQS queues, or AWS Secrets Manager with Pikku. DO NOT TRIGGER when: user asks about AWS
8
+ Lambda runtime (use pikku-deploy-lambda).
6
9
  ---
7
10
 
8
11
  # Pikku AWS Services
@@ -74,9 +77,10 @@ const secrets = new AWSSecrets(config: AWSConfig)
74
77
 
75
78
  **Methods:**
76
79
 
77
- - `getSecret<R>(SecretId: string): Promise<R>` — Get a secret value
78
- - `getSecretJSON<R>(SecretId: string): Promise<R>`Get and parse a JSON secret
80
+ - `getSecret<T = string>(SecretId: string): Promise<T>` — Get a secret value; a JSON secret is parsed automatically, so pass a shape as `T` (a non-JSON value comes back as the raw string)
81
+ - `getSecrets<T>(SecretIds: (keyof T & string)[]): Promise<Partial<T>>`Batch fetch; missing keys are omitted rather than thrown
79
82
  - `hasSecret(SecretId: string): Promise<boolean>` — Check if secret exists
83
+ - `setSecret` / `deleteSecret` — **not implemented** for `AWSSecrets`; it throws. Manage AWS secrets out of band.
80
84
 
81
85
  ## Usage Patterns
82
86
 
@@ -1,8 +1,9 @@
1
1
  ---
2
2
  name: pikku-backblaze
3
- description: 'Use when setting up Backblaze B2 file storage in a Pikku app. Covers B2Content for file uploads, downloads, and signed URLs.
4
- TRIGGER when: code uses B2Content, user asks about Backblaze B2, or @pikku/backblaze.
5
- DO NOT TRIGGER when: user asks about S3 storage (use pikku-aws).'
3
+ description: >-
4
+ Use when setting up Backblaze B2 file storage in a Pikku app. Covers B2Content for file uploads,
5
+ downloads, and signed URLs. TRIGGER when: code uses B2Content, user asks about Backblaze B2, or
6
+ @pikku/backblaze. DO NOT TRIGGER when: user asks about S3 storage (use pikku-aws).
6
7
  ---
7
8
 
8
9
  # Pikku Backblaze (B2 Content Storage)