@pikku/cli 0.12.83 → 0.12.85

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 (217) hide show
  1. package/console-app/assets/{index-CN_U0k_D.js → index-CEv-kj3J.js} +147 -150
  2. package/console-app/assets/index-CSzCJzBb.css +1 -0
  3. package/console-app/index.html +2 -2
  4. package/dist/.pikku/agent/pikku-agent-types.gen.d.ts +3 -2
  5. package/dist/.pikku/{http/pikku-http-wirings.gen.d.ts → auth/auth.types.d.ts} +1 -1
  6. package/dist/.pikku/auth/auth.types.js +5 -0
  7. package/dist/.pikku/channel/pikku-channel-types.gen.d.ts +1 -1
  8. package/dist/.pikku/channel/pikku-channel-types.gen.js +1 -1
  9. package/dist/.pikku/cli/pikku-cli-channel.d.ts +4 -4
  10. package/dist/.pikku/cli/pikku-cli-channel.js +1 -1
  11. package/dist/.pikku/cli/pikku-cli-client.gen.d.ts +1 -1
  12. package/dist/.pikku/cli/pikku-cli-client.gen.js +1 -1
  13. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.d.ts +1 -1
  14. package/dist/.pikku/cli/pikku-cli-contracts-meta.gen.js +1 -1
  15. package/dist/.pikku/cli/pikku-cli-types.gen.d.ts +1 -1
  16. package/dist/.pikku/cli/pikku-cli-types.gen.js +1 -1
  17. package/dist/.pikku/cli/pikku-cli-wirings-meta.gen.js +1 -1
  18. package/dist/.pikku/cli/pikku-cli-wirings.gen.d.ts +1 -1
  19. package/dist/.pikku/cli/pikku-cli-wirings.gen.js +1 -1
  20. package/dist/.pikku/cli/pikku-cli.gen.d.ts +1 -1
  21. package/dist/.pikku/cli/pikku-cli.gen.js +1 -1
  22. package/dist/.pikku/console/pikku-node-types.gen.d.ts +1 -1
  23. package/dist/.pikku/function/pikku-function-types.gen.d.ts +24 -14
  24. package/dist/.pikku/function/pikku-function-types.gen.js +1 -1
  25. package/dist/.pikku/function/pikku-functions-meta.gen.js +1 -1
  26. package/dist/.pikku/function/pikku-functions-meta.gen.json +6 -21
  27. package/dist/.pikku/function/pikku-functions.gen.js +1 -3
  28. package/dist/.pikku/http/pikku-http-types.gen.d.ts +1 -1
  29. package/dist/.pikku/http/pikku-http-types.gen.js +1 -1
  30. package/dist/.pikku/mcp/pikku-mcp-types.gen.d.ts +1 -1
  31. package/dist/.pikku/mcp/pikku-mcp-types.gen.js +1 -1
  32. package/dist/.pikku/pikku-bootstrap.gen.d.ts +1 -5
  33. package/dist/.pikku/pikku-bootstrap.gen.js +1 -5
  34. package/dist/.pikku/pikku-meta-service.gen.d.ts +1 -1
  35. package/dist/.pikku/pikku-meta-service.gen.js +1 -1
  36. package/dist/.pikku/pikku-services.gen.d.ts +1 -1
  37. package/dist/.pikku/pikku-types.gen.d.ts +1 -1
  38. package/dist/.pikku/pikku-types.gen.js +1 -1
  39. package/dist/.pikku/queue/pikku-queue-types.gen.d.ts +1 -1
  40. package/dist/.pikku/queue/pikku-queue-types.gen.js +1 -1
  41. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
  42. package/dist/.pikku/rpc/pikku-rpc-wirings-meta.internal.gen.json +1 -2
  43. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.d.ts +1 -1
  44. package/dist/.pikku/scheduler/pikku-scheduler-types.gen.js +1 -1
  45. package/dist/.pikku/schemas/register.gen.js +1 -7
  46. package/dist/.pikku/scopes/pikku-scope-types.gen.d.ts +1 -1
  47. package/dist/.pikku/scopes/pikku-scope-types.gen.js +1 -1
  48. package/dist/.pikku/scopes/pikku-scopes.gen.d.ts +1 -1
  49. package/dist/.pikku/secrets/pikku-secret-types.gen.d.ts +1 -1
  50. package/dist/.pikku/secrets/pikku-secret-types.gen.js +1 -1
  51. package/dist/.pikku/secrets/pikku-secrets.gen.d.ts +1 -1
  52. package/dist/.pikku/secrets/pikku-secrets.gen.js +1 -1
  53. package/dist/.pikku/trigger/pikku-trigger-types.gen.d.ts +1 -1
  54. package/dist/.pikku/trigger/pikku-trigger-types.gen.js +1 -1
  55. package/dist/.pikku/variables/pikku-variable-types.gen.d.ts +1 -1
  56. package/dist/.pikku/variables/pikku-variable-types.gen.js +1 -1
  57. package/dist/.pikku/variables/pikku-variables.gen.d.ts +1 -1
  58. package/dist/.pikku/variables/pikku-variables.gen.js +1 -1
  59. package/dist/.pikku/workflow/meta/allWorkflow.gen.json +2 -2
  60. package/dist/.pikku/workflow/pikku-workflow-types.gen.d.ts +8 -2
  61. package/dist/.pikku/workflow/pikku-workflow-types.gen.js +1 -1
  62. package/dist/.pikku/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
  63. package/dist/.pikku/workflow/pikku-workflow-wirings.gen.js +1 -1
  64. package/dist/bin/pikku-bin.mjs +2 -2
  65. package/dist/src/fabric/fabric-commands.d.ts +50 -50
  66. package/dist/src/fabric/functions/add.function.d.ts +2 -2
  67. package/dist/src/fabric/functions/addon-verify.function.d.ts +2 -2
  68. package/dist/src/fabric/functions/db-schema.function.d.ts +2 -2
  69. package/dist/src/fabric/functions/deploy-list.function.d.ts +2 -2
  70. package/dist/src/fabric/functions/deploy-units.function.d.ts +2 -2
  71. package/dist/src/fabric/functions/deploy.function.d.ts +4 -4
  72. package/dist/src/fabric/functions/domains-add.function.d.ts +2 -2
  73. package/dist/src/fabric/functions/domains-list.function.d.ts +2 -2
  74. package/dist/src/fabric/functions/domains-remove.function.d.ts +2 -2
  75. package/dist/src/fabric/functions/errors.function.d.ts +2 -2
  76. package/dist/src/fabric/functions/init.function.d.ts +2 -2
  77. package/dist/src/fabric/functions/link.function.d.ts +2 -2
  78. package/dist/src/fabric/functions/llm-key.function.d.ts +2 -2
  79. package/dist/src/fabric/functions/login.function.d.ts +2 -2
  80. package/dist/src/fabric/functions/logs.function.d.ts +2 -2
  81. package/dist/src/fabric/functions/metrics.function.d.ts +2 -2
  82. package/dist/src/fabric/functions/publish.function.d.ts +2 -2
  83. package/dist/src/fabric/functions/rollback.function.d.ts +2 -2
  84. package/dist/src/fabric/functions/secrets-list.function.d.ts +2 -2
  85. package/dist/src/fabric/functions/secrets-set.function.d.ts +2 -2
  86. package/dist/src/fabric/functions/smoke.function.d.ts +2 -2
  87. package/dist/src/fabric/functions/status.function.d.ts +2 -2
  88. package/dist/src/fabric/functions/trace.function.d.ts +2 -2
  89. package/dist/src/fabric/functions/validate.function.d.ts +2 -2
  90. package/dist/src/functions/commands/all.d.ts +1 -1
  91. package/dist/src/functions/commands/audit.d.ts +1 -1
  92. package/dist/src/functions/commands/binary.d.ts +2 -2
  93. package/dist/src/functions/commands/bootstrap.d.ts +1 -1
  94. package/dist/src/functions/commands/db-audit.d.ts +1 -1
  95. package/dist/src/functions/commands/db-generate.d.ts +1 -1
  96. package/dist/src/functions/commands/db-migrate.d.ts +1 -1
  97. package/dist/src/functions/commands/db-reset.d.ts +1 -1
  98. package/dist/src/functions/commands/db-seed.d.ts +1 -1
  99. package/dist/src/functions/commands/deploy-apply.d.ts +2 -2
  100. package/dist/src/functions/commands/deploy-info.d.ts +1 -1
  101. package/dist/src/functions/commands/deploy-plan.d.ts +2 -2
  102. package/dist/src/functions/commands/dev.d.ts +2 -2
  103. package/dist/src/functions/commands/emails-init.d.ts +1 -1
  104. package/dist/src/functions/commands/enable.d.ts +8 -8
  105. package/dist/src/functions/commands/import-n8n.d.ts +2 -2
  106. package/dist/src/functions/commands/info.d.ts +4 -4
  107. package/dist/src/functions/commands/login.d.ts +5 -5
  108. package/dist/src/functions/commands/meta.d.ts +25 -25
  109. package/dist/src/functions/commands/new-addon.d.ts +13 -2
  110. package/dist/src/functions/commands/new-addon.js +38 -4
  111. package/dist/src/functions/commands/new-function.d.ts +2 -2
  112. package/dist/src/functions/commands/new-middleware.d.ts +2 -2
  113. package/dist/src/functions/commands/new-permission.d.ts +2 -2
  114. package/dist/src/functions/commands/new-wiring.d.ts +2 -2
  115. package/dist/src/functions/commands/pikku-command-bootstrap.d.ts +1 -1
  116. package/dist/src/functions/commands/pikku-command-summary.d.ts +1 -1
  117. package/dist/src/functions/commands/scenario.d.ts +3 -3
  118. package/dist/src/functions/commands/scopes-audit.d.ts +1 -1
  119. package/dist/src/functions/commands/scopes-prune.d.ts +2 -2
  120. package/dist/src/functions/commands/serve.d.ts +2 -2
  121. package/dist/src/functions/commands/skills.d.ts +4 -4
  122. package/dist/src/functions/commands/versions-check.d.ts +1 -1
  123. package/dist/src/functions/commands/versions-init.d.ts +2 -2
  124. package/dist/src/functions/commands/versions-update.d.ts +1 -1
  125. package/dist/src/functions/commands/watch.d.ts +2 -2
  126. package/dist/src/functions/commands/workspace-validate.d.ts +2 -2
  127. package/dist/src/functions/runtimes/fetch/index.d.ts +1 -1
  128. package/dist/src/functions/runtimes/nextjs/pikku-command-nextjs.d.ts +1 -1
  129. package/dist/src/functions/runtimes/tanstack-start/pikku-command-tanstack-start.d.ts +1 -1
  130. package/dist/src/functions/runtimes/websocket/pikku-command-websocket-typed.d.ts +1 -1
  131. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.d.ts +1 -1
  132. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent-types.js +3 -2
  133. package/dist/src/functions/wirings/ai-agent/pikku-command-ai-agent.d.ts +1 -1
  134. package/dist/src/functions/wirings/ai-agent/pikku-command-public-agent.d.ts +1 -1
  135. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.d.ts +1 -1
  136. package/dist/src/functions/wirings/ai-agent/serialize-ai-agent-types.js +3 -2
  137. package/dist/src/functions/wirings/ai-agent/serialize-public-agent.js +55 -16
  138. package/dist/src/functions/wirings/auth/pikku-command-auth.d.ts +2 -2
  139. package/dist/src/functions/wirings/channels/pikku-channels.d.ts +1 -1
  140. package/dist/src/functions/wirings/channels/pikku-command-channel-types.d.ts +1 -1
  141. package/dist/src/functions/wirings/channels/pikku-command-channels-map.d.ts +1 -1
  142. package/dist/src/functions/wirings/channels/pikku-command-channels.d.ts +1 -1
  143. package/dist/src/functions/wirings/cli/pikku-command-cli-entry.d.ts +1 -1
  144. package/dist/src/functions/wirings/cli/pikku-command-cli-types.d.ts +1 -1
  145. package/dist/src/functions/wirings/cli/pikku-command-cli.d.ts +1 -1
  146. package/dist/src/functions/wirings/console/pikku-command-console-functions.d.ts +1 -1
  147. package/dist/src/functions/wirings/console/pikku-command-node-types.d.ts +1 -1
  148. package/dist/src/functions/wirings/console/pikku-command-nodes-meta.d.ts +1 -1
  149. package/dist/src/functions/wirings/credentials/pikku-command-credentials.d.ts +1 -1
  150. package/dist/src/functions/wirings/emails/pikku-command-emails.d.ts +1 -1
  151. package/dist/src/functions/wirings/functions/pikku-command-addon-types.d.ts +1 -1
  152. package/dist/src/functions/wirings/functions/pikku-command-function-types-split.d.ts +2 -2
  153. package/dist/src/functions/wirings/functions/pikku-command-function-types.d.ts +2 -2
  154. package/dist/src/functions/wirings/functions/pikku-command-functions.d.ts +1 -1
  155. package/dist/src/functions/wirings/functions/pikku-command-services.d.ts +2 -2
  156. package/dist/src/functions/wirings/functions/pikku-command-services.js +9 -2
  157. package/dist/src/functions/wirings/functions/schemas.d.ts +1 -1
  158. package/dist/src/functions/wirings/functions/serialize-function-types.js +23 -12
  159. package/dist/src/functions/wirings/gateway/pikku-command-gateway.d.ts +1 -1
  160. package/dist/src/functions/wirings/graph/pikku-command-graph-wirings.d.ts +1 -1
  161. package/dist/src/functions/wirings/http/pikku-command-http-map.d.ts +1 -1
  162. package/dist/src/functions/wirings/http/pikku-command-http-routes.d.ts +1 -1
  163. package/dist/src/functions/wirings/http/pikku-command-http-types.d.ts +1 -1
  164. package/dist/src/functions/wirings/http/pikku-command-openapi.d.ts +1 -1
  165. package/dist/src/functions/wirings/http/pikku-http-routes.d.ts +1 -1
  166. package/dist/src/functions/wirings/mcp/pikku-command-mcp-json.d.ts +1 -1
  167. package/dist/src/functions/wirings/mcp/pikku-command-mcp-types.d.ts +1 -1
  168. package/dist/src/functions/wirings/mcp/pikku-command-mcp.d.ts +1 -1
  169. package/dist/src/functions/wirings/middleware/pikku-command-middleware.d.ts +1 -1
  170. package/dist/src/functions/wirings/package/pikku-command-package-types.d.ts +3 -3
  171. package/dist/src/functions/wirings/package/pikku-command-package.d.ts +1 -1
  172. package/dist/src/functions/wirings/permissions/pikku-command-permissions.d.ts +1 -1
  173. package/dist/src/functions/wirings/queue/pikku-command-queue-map.d.ts +1 -1
  174. package/dist/src/functions/wirings/queue/pikku-command-queue-service.d.ts +1 -1
  175. package/dist/src/functions/wirings/queue/pikku-command-queue-types.d.ts +1 -1
  176. package/dist/src/functions/wirings/queue/pikku-command-queue.d.ts +1 -1
  177. package/dist/src/functions/wirings/queue/pikku-queue-map.d.ts +1 -1
  178. package/dist/src/functions/wirings/queue/pikku-queue.d.ts +1 -1
  179. package/dist/src/functions/wirings/realtime/pikku-command-events-scaffold.d.ts +1 -1
  180. package/dist/src/functions/wirings/realtime/pikku-command-realtime.d.ts +1 -1
  181. package/dist/src/functions/wirings/rpc/pikku-command-public-rpc.d.ts +1 -1
  182. package/dist/src/functions/wirings/rpc/pikku-command-react-query.d.ts +1 -1
  183. package/dist/src/functions/wirings/rpc/pikku-command-remote-rpc.d.ts +1 -1
  184. package/dist/src/functions/wirings/rpc/pikku-command-rpc-client.d.ts +1 -1
  185. package/dist/src/functions/wirings/rpc/pikku-command-rpc-map.d.ts +3 -3
  186. package/dist/src/functions/wirings/rpc/pikku-command-rpc.d.ts +1 -1
  187. package/dist/src/functions/wirings/scenarios/pikku-command-scenario-functions.d.ts +1 -1
  188. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler-types.d.ts +1 -1
  189. package/dist/src/functions/wirings/scheduler/pikku-command-scheduler.d.ts +1 -1
  190. package/dist/src/functions/wirings/scopes/pikku-command-scopes.d.ts +2 -2
  191. package/dist/src/functions/wirings/secrets/pikku-command-secrets.d.ts +1 -1
  192. package/dist/src/functions/wirings/triggers/pikku-command-trigger-types.d.ts +2 -2
  193. package/dist/src/functions/wirings/triggers/pikku-command-trigger.d.ts +1 -1
  194. package/dist/src/functions/wirings/variables/pikku-command-variables.d.ts +1 -1
  195. package/dist/src/functions/wirings/webhook/pikku-command-webhook.d.ts +1 -1
  196. package/dist/src/functions/wirings/workflow/pikku-command-workflow-routes.d.ts +1 -1
  197. package/dist/src/functions/wirings/workflow/pikku-command-workflow.d.ts +1 -1
  198. package/dist/src/functions/wirings/workflow/pikku-command-workflow.js +2 -1
  199. package/dist/src/functions/wirings/workflow/serialize-workflow-types.d.ts +1 -1
  200. package/dist/src/functions/wirings/workflow/serialize-workflow-types.js +8 -2
  201. package/dist/tsconfig.tsbuildinfo +1 -1
  202. package/package.json +5 -5
  203. package/skills/pikku-ai-agent/SKILL.md +3 -3
  204. package/skills/pikku-services/SKILL.md +34 -0
  205. package/console-app/assets/index-CpHRlBt-.css +0 -1
  206. package/dist/.pikku/http/pikku-http-wirings-meta.gen.d.ts +0 -1
  207. package/dist/.pikku/http/pikku-http-wirings-meta.gen.js +0 -6
  208. package/dist/.pikku/http/pikku-http-wirings-meta.gen.json +0 -26
  209. package/dist/.pikku/http/pikku-http-wirings.gen.js +0 -5
  210. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.d.ts +0 -1
  211. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.js +0 -6
  212. package/dist/.pikku/queue/pikku-queue-workers-wirings-meta.gen.json +0 -10
  213. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.d.ts +0 -4
  214. package/dist/.pikku/queue/pikku-queue-workers-wirings.gen.js +0 -5
  215. package/dist/.pikku/schemas/schemas/RemoteRPCHandlerInput.schema.json +0 -1
  216. package/dist/src/scaffold/rpc-remote.gen.d.ts +0 -10
  217. package/dist/src/scaffold/rpc-remote.gen.js +0 -27
@@ -1,3 +1,14 @@
1
+ /**
2
+ * Pick the protocol the generated test app uses to depend on its parent addon.
3
+ *
4
+ * Inside a workspace this must be `workspace:*`. The `file:` protocol copies
5
+ * the whole parent directory rather than honouring its `files` field, so the
6
+ * copy includes the parent's own test/node_modules — which already holds a
7
+ * copy. Every install then adds another layer until the path exceeds the OS
8
+ * limit. Outside a workspace `workspace:*` cannot resolve, so `file:` remains
9
+ * the only option there.
10
+ */
11
+ export declare function resolveAddonDepProtocol(baseDir: string): string;
1
12
  export declare const pikkuNewAddon: import("#pikku").PikkuFunctionConfig<{
2
13
  name: string;
3
14
  displayName?: string;
@@ -28,7 +39,7 @@ export declare const pikkuNewAddon: import("#pikku").PikkuFunctionConfig<{
28
39
  authConfig?: string;
29
40
  mcp?: boolean;
30
41
  camelCase?: boolean;
31
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
42
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
32
43
  name: string;
33
44
  displayName?: string;
34
45
  description?: string;
@@ -43,4 +54,4 @@ export declare const pikkuNewAddon: import("#pikku").PikkuFunctionConfig<{
43
54
  authConfig?: string;
44
55
  mcp?: boolean;
45
56
  camelCase?: boolean;
46
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
57
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,9 +1,42 @@
1
- import { existsSync } from 'fs';
2
- import { join } from 'path';
1
+ import { existsSync, readFileSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
3
  import { mkdir, writeFile } from 'fs/promises';
4
4
  import { createEmptyManifest, saveManifest, } from '../../utils/contract-versions.js';
5
5
  import { pikkuSessionlessFunc } from '#pikku';
6
6
  import { parseOpenAPISpec, computeContractHash, generateAddonFromOpenAPI, loadAuthConfig, } from '@pikku/openapi-parser';
7
+ /**
8
+ * Pick the protocol the generated test app uses to depend on its parent addon.
9
+ *
10
+ * Inside a workspace this must be `workspace:*`. The `file:` protocol copies
11
+ * the whole parent directory rather than honouring its `files` field, so the
12
+ * copy includes the parent's own test/node_modules — which already holds a
13
+ * copy. Every install then adds another layer until the path exceeds the OS
14
+ * limit. Outside a workspace `workspace:*` cannot resolve, so `file:` remains
15
+ * the only option there.
16
+ */
17
+ export function resolveAddonDepProtocol(baseDir) {
18
+ let dir = baseDir;
19
+ while (true) {
20
+ const manifest = join(dir, 'package.json');
21
+ if (existsSync(manifest)) {
22
+ try {
23
+ const { workspaces } = JSON.parse(readFileSync(manifest, 'utf8'));
24
+ if (Array.isArray(workspaces) || Array.isArray(workspaces?.packages)) {
25
+ return 'workspace:*';
26
+ }
27
+ }
28
+ catch {
29
+ // A malformed manifest tells us nothing about the workspace layout;
30
+ // keep walking up rather than failing the scaffold.
31
+ }
32
+ }
33
+ const parent = dirname(dir);
34
+ if (parent === dir) {
35
+ return 'file:..';
36
+ }
37
+ dir = parent;
38
+ }
39
+ }
7
40
  function toCamelCase(str) {
8
41
  return str.replace(/-([a-z0-9])/g, (_, c) => c.toUpperCase());
9
42
  }
@@ -626,7 +659,7 @@ wireVariable({
626
659
  return files;
627
660
  }
628
661
  function getTestFiles(vars) {
629
- const { name, camelName, pascalName, screamingName } = vars;
662
+ const { name, camelName, pascalName, screamingName, addonDepProtocol } = vars;
630
663
  const files = {};
631
664
  // test/package.json
632
665
  files['package.json'] = JSON.stringify({
@@ -643,7 +676,7 @@ function getTestFiles(vars) {
643
676
  },
644
677
  dependencies: {
645
678
  '@pikku/core': '*',
646
- [`@pikku/addon-${name}`]: 'file:..',
679
+ [`@pikku/addon-${name}`]: addonDepProtocol,
647
680
  },
648
681
  devDependencies: {
649
682
  '@pikku/cli': '*',
@@ -822,6 +855,7 @@ export const pikkuNewAddon = pikkuSessionlessFunc({
822
855
  displayName: resolvedDisplayName,
823
856
  description: resolvedDescription,
824
857
  category,
858
+ addonDepProtocol: resolveAddonDepProtocol(baseDir),
825
859
  };
826
860
  // Load the auth config (custom auth header / delegated login overrides)
827
861
  let loadedAuthConfig;
@@ -4,7 +4,7 @@ export declare const pikkuNewFunction: import("#pikku").PikkuFunctionConfig<{
4
4
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
5
5
  name: string;
6
6
  type?: string;
7
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
8
8
  name: string;
9
9
  type?: string;
10
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
10
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -4,7 +4,7 @@ export declare const pikkuNewMiddleware: import("#pikku").PikkuFunctionConfig<{
4
4
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
5
5
  name: string;
6
6
  type?: string;
7
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
8
8
  name: string;
9
9
  type?: string;
10
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
10
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -4,7 +4,7 @@ export declare const pikkuNewPermission: import("#pikku").PikkuFunctionConfig<{
4
4
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
5
5
  name: string;
6
6
  type?: string;
7
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
8
8
  name: string;
9
9
  type?: string;
10
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
10
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -4,7 +4,7 @@ export declare const pikkuNewWiring: import("#pikku").PikkuFunctionConfig<{
4
4
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
5
5
  name: string;
6
6
  type?: string;
7
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
8
8
  name: string;
9
9
  type?: string;
10
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
10
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,4 +1,4 @@
1
1
  export type BootstrapInput = {
2
2
  allImports: string[];
3
3
  };
4
- export declare const pikkuBootstrap: import("#pikku").PikkuFunctionConfig<BootstrapInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<BootstrapInput, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<BootstrapInput, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuBootstrap: import("#pikku").PikkuFunctionConfig<BootstrapInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<BootstrapInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<BootstrapInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuSummary: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuSummary: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,4 +1,4 @@
1
- export declare const scenarioList: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const scenarioList: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
2
2
  export declare const scenarioRun: import("#pikku").PikkuFunctionConfig<{
3
3
  environment: string;
4
4
  flows?: string;
@@ -9,9 +9,9 @@ export declare const scenarioRun: import("#pikku").PikkuFunctionConfig<{
9
9
  flows?: string;
10
10
  tags?: string;
11
11
  coverage?: boolean;
12
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
12
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
13
13
  environment: string;
14
14
  flows?: string;
15
15
  tags?: string;
16
16
  coverage?: boolean;
17
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
17
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const scopesAudit: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const scopesAudit: import("#pikku").PikkuFunctionConfig<{}, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{}, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{}, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -9,6 +9,6 @@ export declare const scopesPrune: import("#pikku").PikkuFunctionConfig<{
9
9
  yes?: boolean;
10
10
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
11
11
  yes?: boolean;
12
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
12
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
13
13
  yes?: boolean;
14
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
14
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -4,7 +4,7 @@ export declare const serve: import("#pikku").PikkuFunctionConfig<{
4
4
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
5
5
  port?: string;
6
6
  console?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
8
8
  port?: string;
9
9
  console?: boolean;
10
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
10
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,9 +2,9 @@ export declare const pikkuSkillsList: import("#pikku").PikkuFunctionConfig<{
2
2
  target?: string;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  target?: string;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  target?: string;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
8
8
  export declare const pikkuSkillsInstall: import("#pikku").PikkuFunctionConfig<{
9
9
  agent?: string;
10
10
  only?: string;
@@ -17,10 +17,10 @@ export declare const pikkuSkillsInstall: import("#pikku").PikkuFunctionConfig<{
17
17
  core?: boolean;
18
18
  fabric?: boolean;
19
19
  update?: boolean;
20
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
20
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
21
21
  agent?: string;
22
22
  only?: string;
23
23
  core?: boolean;
24
24
  fabric?: boolean;
25
25
  update?: boolean;
26
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
26
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuVersionsCheck: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuVersionsCheck: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,6 @@ export declare const pikkuVersionsInit: import("#pikku").PikkuFunctionConfig<{
2
2
  force?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  force?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  force?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuVersionsUpdate: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuVersionsUpdate: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -2,6 +2,6 @@ export declare const watch: import("#pikku").PikkuFunctionConfig<{
2
2
  hmr?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  hmr?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  hmr?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -19,7 +19,7 @@ export declare const workspaceValidate: import("#pikku").PikkuFunctionConfig<Rec
19
19
  path: string;
20
20
  fixHint: string;
21
21
  }[];
22
- }, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<Record<string, never>, {
22
+ }, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<Record<string, never>, {
23
23
  ok: boolean;
24
24
  root: string;
25
25
  findings: {
@@ -29,5 +29,5 @@ export declare const workspaceValidate: import("#pikku").PikkuFunctionConfig<Rec
29
29
  path: string;
30
30
  fixHint: string;
31
31
  }[];
32
- }, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
32
+ }, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
33
33
  export { renderWorkspaceValidate };
@@ -1 +1 @@
1
- export declare const pikkuFetch: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuFetch: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuNext: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuNext: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuTanStackStart: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuTanStackStart: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuWebSocketTyped: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuWebSocketTyped: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuAIAgentTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuAIAgentTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -5,10 +5,11 @@ import { logCommandInfoAndTime } from '../../../middleware/log-command-info-and-
5
5
  import { serializeAIAgentTypes } from './serialize-ai-agent-types.js';
6
6
  export const pikkuAIAgentTypes = pikkuSessionlessFunc({
7
7
  func: async ({ logger, config }) => {
8
- const { agentTypesFile, functionTypesFile, agentMapDeclarationFile, packageMappings, } = config;
8
+ const { agentTypesFile, functionTypesFile, agentMapDeclarationFile, scopesFile, packageMappings, } = config;
9
9
  const functionTypesImportPath = getFileImportRelativePath(agentTypesFile, functionTypesFile, packageMappings);
10
10
  const agentMapImportPath = getFileImportRelativePath(agentTypesFile, agentMapDeclarationFile, packageMappings);
11
- const content = serializeAIAgentTypes(functionTypesImportPath, agentMapImportPath);
11
+ const scopesImportPath = getFileImportRelativePath(agentTypesFile, scopesFile, packageMappings);
12
+ const content = serializeAIAgentTypes(functionTypesImportPath, agentMapImportPath, scopesImportPath);
12
13
  await writeFileInDir(logger, agentTypesFile, content);
13
14
  },
14
15
  middleware: [
@@ -1 +1 @@
1
- export declare const pikkuAIAgent: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuAIAgent: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuPublicAgent: 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>;
1
+ export declare const pikkuPublicAgent: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const serializeAIAgentTypes: (functionTypesImportPath: string, agentMapImportPath: string) => string;
1
+ export declare const serializeAIAgentTypes: (functionTypesImportPath: string, agentMapImportPath: string, scopesImportPath: string) => string;
@@ -1,4 +1,4 @@
1
- export const serializeAIAgentTypes = (functionTypesImportPath, agentMapImportPath) => {
1
+ export const serializeAIAgentTypes = (functionTypesImportPath, agentMapImportPath, scopesImportPath) => {
2
2
  return `import {
3
3
  CoreAIAgent,
4
4
  PikkuAIMiddlewareHooks,
@@ -13,11 +13,12 @@ import type { PikkuPermission, PikkuMiddleware, Services, PikkuFunctionConfig }
13
13
  import type { StandardSchemaV1 } from '@standard-schema/spec'
14
14
  import type { AIAgentMemoryConfig, AIAgentInput } from '@pikku/core/ai-agent'
15
15
  import type { AgentMap } from '${agentMapImportPath}'
16
+ import type { ScopeId } from '${scopesImportPath}'
16
17
 
17
18
  type AIAgentConfig<
18
19
  InputSchema extends StandardSchemaV1 | undefined = undefined,
19
20
  OutputSchema extends StandardSchemaV1 | undefined = undefined
20
- > = Omit<CoreAIAgent<PikkuPermission, PikkuMiddleware>, 'tools' | 'agents' | 'workflows' | 'memory' | 'input' | 'output'> & {
21
+ > = Omit<CoreAIAgent<PikkuPermission, PikkuMiddleware, ScopeId>, 'tools' | 'agents' | 'workflows' | 'memory' | 'input' | 'output'> & {
21
22
  input?: InputSchema
22
23
  output?: OutputSchema
23
24
  memory?: Omit<AIAgentMemoryConfig, 'workingMemory'> & { workingMemory?: StandardSchemaV1 }
@@ -1,12 +1,45 @@
1
1
  export const serializePublicAgent = (pathToPikkuTypes, requireAuth = true, globalHTTPPrefix = '') => {
2
2
  const authFlag = requireAuth ? 'true' : 'false';
3
- return `import { MissingServiceError } from '@pikku/core/errors'
4
- import { pikkuSessionlessFunc, defineHTTPRoutes, wireHTTPRoutes } from '${pathToPikkuTypes}'
3
+ // Emitted inline at each call site rather than as a shared named alias: the
4
+ // schema extractor only reads type literals in the generic position, and
5
+ // synthesises the schema name from the function name. Behind a named alias it
6
+ // records an `inputSchemaName` with no schema behind it, and every agent call
7
+ // then fails at runtime with MissingSchemaError.
8
+ const callerInput = `{
9
+ agentName: string
10
+ message: string
11
+ threadId: string
12
+ resourceId: string
13
+ attachments?: {
14
+ type: 'image' | 'file'
15
+ data?: string
16
+ url?: string
17
+ mediaType?: string
18
+ filename?: string
19
+ }[]
20
+ model?: string
21
+ temperature?: number
22
+ context?: string
23
+ }`;
24
+ return `import { canAccessThread, threadOwnerConstraint } from '@pikku/core/ai-agent'
25
+ import { pikkuSessionlessFunc, pikkuPermission, defineHTTPRoutes, wireHTTPRoutes } from '${pathToPikkuTypes}'
5
26
 
6
- export const agentCaller = pikkuSessionlessFunc<
7
- { agentName: string; message: string; threadId: string; resourceId: string },
8
- unknown
9
- >({
27
+ /**
28
+ * Thread reads are keyed by a caller-supplied \`threadId\`, so ownership cannot
29
+ * come from the request — it is derived from the session and checked against
30
+ * the stored thread's resourceId.
31
+ */
32
+ export const isThreadOwner = pikkuPermission<{ threadId: string }>(
33
+ async ({ agentRunService }, { threadId }, { session }) => {
34
+ const thread = await agentRunService.getThread(threadId)
35
+ // A missing thread is denied rather than 404'd so it is indistinguishable
36
+ // from one owned by someone else — no existence oracle.
37
+ if (!thread) return false
38
+ return canAccessThread(thread.resourceId, session)
39
+ }
40
+ )
41
+
42
+ export const agentCaller = pikkuSessionlessFunc<${callerInput}, unknown>({
10
43
  tags: ['pikku'],
11
44
  auth: ${authFlag},
12
45
  func: async (_services, data, { rpc }) => {
@@ -14,14 +47,15 @@ export const agentCaller = pikkuSessionlessFunc<
14
47
  message: data.message,
15
48
  threadId: data.threadId,
16
49
  resourceId: data.resourceId,
50
+ ...(data.attachments ? { attachments: data.attachments } : {}),
51
+ ...(data.model ? { model: data.model } : {}),
52
+ ...(data.temperature !== undefined ? { temperature: data.temperature } : {}),
53
+ ...(data.context ? { context: data.context } : {}),
17
54
  })
18
55
  },
19
56
  })
20
57
 
21
- export const agentStreamCaller = pikkuSessionlessFunc<
22
- { agentName: string; message: string; threadId: string; resourceId: string; context?: string },
23
- void
24
- >({
58
+ export const agentStreamCaller = pikkuSessionlessFunc<${callerInput}, void>({
25
59
  tags: ['pikku'],
26
60
  auth: ${authFlag},
27
61
  func: async (_services, data, { rpc }) => {
@@ -29,6 +63,9 @@ export const agentStreamCaller = pikkuSessionlessFunc<
29
63
  message: data.message,
30
64
  threadId: data.threadId,
31
65
  resourceId: data.resourceId,
66
+ ...(data.attachments ? { attachments: data.attachments } : {}),
67
+ ...(data.model ? { model: data.model } : {}),
68
+ ...(data.temperature !== undefined ? { temperature: data.temperature } : {}),
32
69
  ...(data.context ? { context: data.context } : {}),
33
70
  })
34
71
  },
@@ -66,14 +103,16 @@ export const getAgentThreads = pikkuSessionlessFunc<
66
103
  tags: ['pikku', 'pikku:agent'],
67
104
  title: 'Get Agent Threads',
68
105
  description:
69
- 'Returns a list of AI agent threads from storage. Accepts optional filters: agentName, resourceId, limit, and offset for pagination.',
106
+ 'Returns the caller\\'s AI agent threads from storage. Accepts optional filters: agentName, resourceId, limit, and offset for pagination.',
70
107
  expose: true,
71
108
  auth: ${authFlag},
72
- func: async ({ agentRunService }, input) => {
73
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
109
+ func: async ({ agentRunService }, input, { session }) => {
110
+ // \`owners\` is an authorization constraint derived from the session, never
111
+ // from input — \`resourceId\` remains a caller-supplied filter within it.
74
112
  return await agentRunService.listThreads({
75
113
  agentName: input?.agentName,
76
114
  resourceId: input?.resourceId,
115
+ owners: threadOwnerConstraint(session),
77
116
  limit: input?.limit,
78
117
  offset: input?.offset,
79
118
  })
@@ -90,8 +129,8 @@ export const getAgentThreadMessages = pikkuSessionlessFunc<
90
129
  'Returns all messages for a given AI agent thread, ordered by creation time.',
91
130
  expose: true,
92
131
  auth: ${authFlag},
132
+ permissions: { owner: isThreadOwner },
93
133
  func: async ({ agentRunService }, input) => {
94
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
95
134
  return await agentRunService.getThreadMessages(input.threadId)
96
135
  },
97
136
  })
@@ -106,8 +145,8 @@ export const getAgentThreadRuns = pikkuSessionlessFunc<
106
145
  'Returns the run history for a given AI agent thread, ordered by creation time.',
107
146
  expose: true,
108
147
  auth: ${authFlag},
148
+ permissions: { owner: isThreadOwner },
109
149
  func: async ({ agentRunService }, input) => {
110
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
111
150
  return await agentRunService.getThreadRuns(input.threadId)
112
151
  },
113
152
  })
@@ -122,8 +161,8 @@ export const deleteAgentThread = pikkuSessionlessFunc<
122
161
  'Deletes an AI agent thread and all of its persisted state.',
123
162
  expose: true,
124
163
  auth: ${authFlag},
164
+ permissions: { owner: isThreadOwner },
125
165
  func: async ({ agentRunService }, input) => {
126
- if (!agentRunService) throw new MissingServiceError('agentRunService is not available')
127
166
  const deleted = await agentRunService.deleteThread(input.threadId)
128
167
  return { deleted }
129
168
  },
@@ -2,6 +2,6 @@ export declare const pikkuAuth: import("#pikku").PikkuFunctionConfig<{
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuChannels: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuChannels: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuChannelTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuChannelsMap: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuCommandChannels: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCLIEntry: 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>;
1
+ export declare const pikkuCLIEntry: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,5 +1,5 @@
1
1
  type CLITypesCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuCLITypes: import("#pikku").PikkuFunctionConfig<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<CLITypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};
@@ -1 +1 @@
1
- export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuCLI: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuConsoleFunctions: 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>;
1
+ export declare const pikkuConsoleFunctions: import("#pikku").PikkuFunctionConfig<void, boolean, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuNodeTypes: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuNodesMeta: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1 +1 @@
1
- export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
1
+ export declare const pikkuCredentials: import("#pikku").PikkuFunctionConfig<void, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
@@ -1,6 +1,6 @@
1
1
  import type { PikkuCLIConfig } from '../../../../types/config.js';
2
2
  import type { CLILogger } from '../../../services/cli-logger.service.js';
3
- export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
3
+ export declare const pikkuEmails: import("#pikku").PikkuFunctionConfig<void, boolean | undefined, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<void, boolean | undefined, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
4
4
  export declare function generateEmailsArtifacts(logger: CLILogger, config: Pick<PikkuCLIConfig, 'outDir'> & {
5
5
  emailTemplatesDir?: string;
6
6
  }): Promise<true | undefined>;
@@ -1,5 +1,5 @@
1
1
  type AddonTypesCommandInput = {
2
2
  bootstrap?: boolean;
3
3
  };
4
- export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
4
+ export declare const pikkuAddonTypes: import("#pikku").PikkuFunctionConfig<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<AddonTypesCommandInput, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;
5
5
  export {};
@@ -2,6 +2,6 @@ export declare const pikkuFunctionTypesSplit: import("#pikku").PikkuFunctionConf
2
2
  bootstrap?: boolean;
3
3
  }, void, "rpc" | "session", import("#pikku").PikkuFunctionSessionless<{
4
4
  bootstrap?: boolean;
5
- }, void, "rpc" | "session", import("#pikku").Services> | import("#pikku").PikkuFunction<{
5
+ }, void, "rpc" | "session", import("#pikku").WiredServices> | import("#pikku").PikkuFunction<{
6
6
  bootstrap?: boolean;
7
- }, void, "rpc" | "session", import("#pikku").Services>, undefined, undefined>;
7
+ }, void, "rpc" | "session", import("#pikku").WiredServices>, undefined, undefined>;