@pikku/addon-console 0.12.44 → 0.12.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +115 -0
- package/dist/.pikku/addon/agent/index.d.ts +1 -1
- package/dist/.pikku/addon/agent/index.js +1 -1
- package/dist/.pikku/addon/agent/pikku-agent-map.gen.d.ts +1 -1
- package/dist/.pikku/addon/agent/pikku-agent-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/agent/pikku-model-aliases.gen.js +1 -1
- package/dist/.pikku/addon/agent/pikku-scorer-names.gen.d.ts +1 -1
- package/dist/.pikku/addon/auth/auth.types.d.ts +1 -1
- package/dist/.pikku/addon/auth/auth.types.js +1 -1
- package/dist/.pikku/addon/auth/index.d.ts +1 -1
- package/dist/.pikku/addon/auth/index.js +1 -1
- package/dist/.pikku/addon/auth/pikku-auth-types.gen.d.ts +9 -2
- package/dist/.pikku/addon/auth/pikku-auth-types.gen.d.ts.map +1 -1
- package/dist/.pikku/addon/auth/pikku-auth-types.gen.js +1 -1
- package/dist/.pikku/addon/auth/pikku-auth-types.gen.js.map +1 -1
- package/dist/.pikku/addon/channel/index.d.ts +1 -1
- package/dist/.pikku/addon/channel/index.js +1 -1
- package/dist/.pikku/addon/channel/pikku-channel-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/channel/pikku-channel-types.gen.js +1 -1
- package/dist/.pikku/addon/error/index.d.ts +1 -1
- package/dist/.pikku/addon/error/index.js +1 -1
- package/dist/.pikku/addon/error/pikku-error-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/error/pikku-error-types.gen.js +1 -1
- package/dist/.pikku/addon/function/index.d.ts +1 -1
- package/dist/.pikku/addon/function/index.js +1 -1
- package/dist/.pikku/addon/function/pikku-function-types.gen.d.ts +12 -2
- package/dist/.pikku/addon/function/pikku-function-types.gen.d.ts.map +1 -1
- package/dist/.pikku/addon/function/pikku-function-types.gen.js +1 -1
- package/dist/.pikku/addon/function/pikku-function-types.gen.js.map +1 -1
- package/dist/.pikku/addon/function/pikku-functions-meta-verbose.gen.json +136 -8
- package/dist/.pikku/addon/function/pikku-functions-meta.gen.js +1 -1
- package/dist/.pikku/addon/function/pikku-functions-meta.gen.json +103 -2
- package/dist/.pikku/addon/function/pikku-functions.gen.js +7 -1
- package/dist/.pikku/addon/function/pikku-functions.gen.js.map +1 -1
- package/dist/.pikku/addon/http/index.d.ts +1 -1
- package/dist/.pikku/addon/http/index.js +1 -1
- package/dist/.pikku/addon/http/pikku-http-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/http/pikku-http-types.gen.js +1 -1
- package/dist/.pikku/addon/mcp/index.d.ts +1 -1
- package/dist/.pikku/addon/mcp/index.js +1 -1
- package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/mcp/pikku-mcp-types.gen.js +1 -1
- package/dist/.pikku/addon/middleware/index.d.ts +1 -1
- package/dist/.pikku/addon/middleware/index.js +1 -1
- package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.d.ts +9 -2
- package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.d.ts.map +1 -1
- package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.js +1 -1
- package/dist/.pikku/addon/middleware/pikku-middleware-types.gen.js.map +1 -1
- package/dist/.pikku/addon/permissions/pikku-permissions.gen.d.ts +5 -0
- package/dist/.pikku/addon/permissions/pikku-permissions.gen.d.ts.map +1 -0
- package/dist/.pikku/addon/permissions/pikku-permissions.gen.js +5 -0
- package/dist/.pikku/addon/permissions/pikku-permissions.gen.js.map +1 -0
- package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.d.ts +1 -1
- package/dist/.pikku/addon/pikku-bootstrap-scenarios.gen.js +1 -1
- package/dist/.pikku/addon/pikku-bootstrap.gen.d.ts +2 -1
- package/dist/.pikku/addon/pikku-bootstrap.gen.d.ts.map +1 -1
- package/dist/.pikku/addon/pikku-bootstrap.gen.js +2 -1
- package/dist/.pikku/addon/pikku-bootstrap.gen.js.map +1 -1
- package/dist/.pikku/addon/pikku-package.gen.js +1 -1
- package/dist/.pikku/addon/pikku-services.gen.d.ts +5 -4
- package/dist/.pikku/addon/pikku-services.gen.d.ts.map +1 -1
- package/dist/.pikku/addon/pikku-services.gen.js +3 -2
- package/dist/.pikku/addon/pikku-services.gen.js.map +1 -1
- package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.gen.d.ts +10 -1
- package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.internal.gen.d.ts +10 -1
- package/dist/.pikku/addon/rpc/pikku-rpc-wirings-map.remote.gen.d.ts +7 -1
- package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.js +1 -1
- package/dist/.pikku/addon/rpc/pikku-rpc-wirings-meta.internal.gen.json +3 -0
- package/dist/.pikku/addon/scenarios/index.d.ts +1 -1
- package/dist/.pikku/addon/scenarios/index.js +1 -1
- package/dist/.pikku/addon/scenarios/pikku-personas.gen.js +1 -1
- package/dist/.pikku/addon/scenarios/pikku-scenario-functions-meta.gen.js +1 -1
- package/dist/.pikku/addon/scenarios/pikku-scenario-functions.gen.d.ts +1 -1
- package/dist/.pikku/addon/scenarios/pikku-scenario-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/scenarios/pikku-scenario-wirings-meta.gen.js +1 -1
- package/dist/.pikku/addon/scenarios/pikku-scenario-wirings.gen.d.ts +1 -1
- package/dist/.pikku/addon/scenarios/schemas/register.gen.d.ts +1 -1
- package/dist/.pikku/addon/scenarios/schemas/register.gen.js +1 -1
- package/dist/.pikku/addon/schemas/register.gen.js +13 -1
- package/dist/.pikku/addon/schemas/register.gen.js.map +1 -1
- package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunStepsInput.schema.json +1 -0
- package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunStepsOutput.schema.json +1 -0
- package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunsInput.schema.json +1 -0
- package/dist/.pikku/addon/schemas/schemas/GetVirtualUserRunsOutput.schema.json +1 -0
- package/dist/.pikku/addon/schemas/schemas/StartVirtualUserRunInput.schema.json +1 -0
- package/dist/.pikku/addon/schemas/schemas/StartVirtualUserRunOutput.schema.json +1 -0
- package/dist/.pikku/addon/scopes/index.d.ts +1 -1
- package/dist/.pikku/addon/scopes/index.js +1 -1
- package/dist/.pikku/addon/scopes/pikku-personas.gen.js +1 -1
- package/dist/.pikku/addon/scopes/pikku-roles.gen.d.ts +1 -1
- package/dist/.pikku/addon/scopes/pikku-scope-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/scopes/pikku-scope-types.gen.js +1 -1
- package/dist/.pikku/addon/scopes/pikku-scopes-meta.gen.json +11 -0
- package/dist/.pikku/addon/scopes/pikku-scopes.gen.d.ts +2 -2
- package/dist/.pikku/addon/scopes/pikku-scopes.gen.d.ts.map +1 -1
- package/dist/.pikku/addon/scopes/pikku-scopes.gen.js.map +1 -1
- package/dist/.pikku/addon/secrets/index.d.ts +1 -1
- package/dist/.pikku/addon/secrets/index.js +1 -1
- package/dist/.pikku/addon/secrets/pikku-secret-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/secrets/pikku-secret-types.gen.js +1 -1
- package/dist/.pikku/addon/secrets/pikku-secrets.gen.d.ts +1 -1
- package/dist/.pikku/addon/secrets/pikku-secrets.gen.js +1 -1
- package/dist/.pikku/addon/services/pikku-meta-service.gen.d.ts +1 -1
- package/dist/.pikku/addon/services/pikku-meta-service.gen.js +1 -1
- package/dist/.pikku/addon/setup/index.d.ts +1 -1
- package/dist/.pikku/addon/setup/index.js +1 -1
- package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/setup/pikku-addon-setup-types.gen.js +1 -1
- package/dist/.pikku/addon/setup/pikku-setup-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/setup/pikku-setup-types.gen.js +1 -1
- package/dist/.pikku/addon/trigger/index.d.ts +1 -1
- package/dist/.pikku/addon/trigger/index.js +1 -1
- package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/trigger/pikku-trigger-types.gen.js +1 -1
- package/dist/.pikku/addon/variables/index.d.ts +1 -1
- package/dist/.pikku/addon/variables/index.js +1 -1
- package/dist/.pikku/addon/variables/pikku-variable-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/variables/pikku-variable-types.gen.js +1 -1
- package/dist/.pikku/addon/variables/pikku-variables.gen.d.ts +1 -1
- package/dist/.pikku/addon/variables/pikku-variables.gen.js +1 -1
- package/dist/.pikku/addon/workflow/index.d.ts +1 -1
- package/dist/.pikku/addon/workflow/index.js +1 -1
- package/dist/.pikku/addon/workflow/pikku-scenario-step-map.gen.d.ts +1 -1
- package/dist/.pikku/addon/workflow/pikku-workflow-map.gen.d.ts +1 -1
- package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.d.ts +1 -1
- package/dist/.pikku/addon/workflow/pikku-workflow-types.gen.js +1 -1
- package/dist/.pikku/addon/workflow/pikku-workflow-wirings-meta.gen.js +1 -1
- package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.d.ts +1 -1
- package/dist/.pikku/addon/workflow/pikku-workflow-wirings.gen.js +1 -1
- package/dist/src/functions/delete-agent-thread.function.d.ts.map +1 -1
- package/dist/src/functions/delete-agent-thread.function.js +3 -1
- package/dist/src/functions/delete-agent-thread.function.js.map +1 -1
- package/dist/src/functions/delete-agent-thread.function.test.d.ts +2 -0
- package/dist/src/functions/delete-agent-thread.function.test.d.ts.map +1 -0
- package/dist/src/functions/delete-agent-thread.function.test.js +8 -0
- package/dist/src/functions/delete-agent-thread.function.test.js.map +1 -0
- package/dist/src/functions/get-agent-thread-messages.function.d.ts.map +1 -1
- package/dist/src/functions/get-agent-thread-messages.function.js +3 -1
- package/dist/src/functions/get-agent-thread-messages.function.js.map +1 -1
- package/dist/src/functions/get-agent-thread-messages.function.test.d.ts +2 -0
- package/dist/src/functions/get-agent-thread-messages.function.test.d.ts.map +1 -0
- package/dist/src/functions/get-agent-thread-messages.function.test.js +8 -0
- package/dist/src/functions/get-agent-thread-messages.function.test.js.map +1 -0
- package/dist/src/functions/get-virtual-user-run-steps.function.d.ts +14 -0
- package/dist/src/functions/get-virtual-user-run-steps.function.d.ts.map +1 -0
- package/dist/src/functions/get-virtual-user-run-steps.function.js +31 -0
- package/dist/src/functions/get-virtual-user-run-steps.function.js.map +1 -0
- package/dist/src/functions/get-virtual-user-runs.function.d.ts +14 -0
- package/dist/src/functions/get-virtual-user-runs.function.d.ts.map +1 -0
- package/dist/src/functions/get-virtual-user-runs.function.js +39 -0
- package/dist/src/functions/get-virtual-user-runs.function.js.map +1 -0
- package/dist/src/functions/is-thread-owner.permission.d.ts +13 -0
- package/dist/src/functions/is-thread-owner.permission.d.ts.map +1 -0
- package/dist/src/functions/is-thread-owner.permission.js +23 -0
- package/dist/src/functions/is-thread-owner.permission.js.map +1 -0
- package/dist/src/functions/is-thread-owner.permission.test.d.ts +2 -0
- package/dist/src/functions/is-thread-owner.permission.test.d.ts.map +1 -0
- package/dist/src/functions/is-thread-owner.permission.test.js +25 -0
- package/dist/src/functions/is-thread-owner.permission.test.js.map +1 -0
- package/dist/src/functions/start-virtual-user-run.function.d.ts +33 -0
- package/dist/src/functions/start-virtual-user-run.function.d.ts.map +1 -0
- package/dist/src/functions/start-virtual-user-run.function.js +31 -0
- package/dist/src/functions/start-virtual-user-run.function.js.map +1 -0
- package/dist/src/scopes.js +11 -0
- package/dist/src/scopes.js.map +1 -1
- package/package.json +4 -4
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { pikkuFunc } from '#pikku/addon/function';
|
|
2
|
+
import { isThreadOwner } from './is-thread-owner.permission.js';
|
|
2
3
|
export const deleteAgentThread = pikkuFunc({
|
|
3
4
|
title: 'Delete Agent Thread',
|
|
4
|
-
description: 'Deletes an AI agent thread and all its associated messages and runs via cascade.',
|
|
5
|
+
description: 'Deletes an AI agent thread and all its associated messages and runs via cascade. A caller without the admin scope may only delete a thread its own session owns.',
|
|
5
6
|
expose: true,
|
|
6
7
|
scopes: ['pikku:console:agents:manage'],
|
|
8
|
+
permissions: { owner: isThreadOwner },
|
|
7
9
|
func: async ({ agentRunService }, input) => {
|
|
8
10
|
const deleted = await agentRunService.deleteThread(input.threadId);
|
|
9
11
|
return { deleted };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-agent-thread.function.js","sourceRoot":"","sources":["../../../src/functions/delete-agent-thread.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"delete-agent-thread.function.js","sourceRoot":"","sources":["../../../src/functions/delete-agent-thread.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAE/D,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAGxC;IACA,KAAK,EAAE,qBAAqB;IAC5B,WAAW,EACT,kKAAkK;IACpK,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,6BAA6B,CAAC;IACvC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACrC,IAAI,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;QAClE,OAAO,EAAE,OAAO,EAAE,CAAA;IACpB,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-agent-thread.function.test.d.ts","sourceRoot":"","sources":["../../../src/functions/delete-agent-thread.function.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
import { deleteAgentThread } from './delete-agent-thread.function.js';
|
|
4
|
+
import { isThreadOwner } from './is-thread-owner.permission.js';
|
|
5
|
+
test('deleting a thread is gated on thread ownership', () => {
|
|
6
|
+
assert.deepEqual(deleteAgentThread.permissions, { owner: isThreadOwner });
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=delete-agent-thread.function.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete-agent-thread.function.test.js","sourceRoot":"","sources":["../../../src/functions/delete-agent-thread.function.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAE/D,IAAI,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC1D,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;AAC3E,CAAC,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-agent-thread-messages.function.d.ts","sourceRoot":"","sources":["../../../src/functions/get-agent-thread-messages.function.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"get-agent-thread-messages.function.d.ts","sourceRoot":"","sources":["../../../src/functions/get-agent-thread-messages.function.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB;cAAyB,MAAM;;cAAN,MAAM;;cAAN,MAAM;2GAUhE,CAAA"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { pikkuFunc } from '#pikku/addon/function';
|
|
2
|
+
import { isThreadOwner } from './is-thread-owner.permission.js';
|
|
2
3
|
export const getAgentThreadMessages = pikkuFunc({
|
|
3
4
|
title: 'Get Agent Thread Messages',
|
|
4
|
-
description: 'Returns all messages for a given AI agent thread, ordered by creation time.',
|
|
5
|
+
description: 'Returns all messages for a given AI agent thread, ordered by creation time. A caller without the admin scope may only read a thread its own session owns.',
|
|
5
6
|
expose: true,
|
|
6
7
|
scopes: ['pikku:console:agents:read'],
|
|
8
|
+
permissions: { owner: isThreadOwner },
|
|
7
9
|
func: async ({ agentRunService }, input) => {
|
|
8
10
|
return await agentRunService.getThreadMessages(input.threadId);
|
|
9
11
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-agent-thread-messages.function.js","sourceRoot":"","sources":["../../../src/functions/get-agent-thread-messages.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"get-agent-thread-messages.function.js","sourceRoot":"","sources":["../../../src/functions/get-agent-thread-messages.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAE/D,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAA8B;IAC3E,KAAK,EAAE,2BAA2B;IAClC,WAAW,EACT,2JAA2J;IAC7J,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,2BAA2B,CAAC;IACrC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;IACrC,IAAI,EAAE,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,KAAK,EAAE,EAAE;QACzC,OAAO,MAAM,eAAe,CAAC,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAChE,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-agent-thread-messages.function.test.d.ts","sourceRoot":"","sources":["../../../src/functions/get-agent-thread-messages.function.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
import { getAgentThreadMessages } from './get-agent-thread-messages.function.js';
|
|
4
|
+
import { isThreadOwner } from './is-thread-owner.permission.js';
|
|
5
|
+
test('thread messages are gated on thread ownership', () => {
|
|
6
|
+
assert.deepEqual(getAgentThreadMessages.permissions, { owner: isThreadOwner });
|
|
7
|
+
});
|
|
8
|
+
//# sourceMappingURL=get-agent-thread-messages.function.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-agent-thread-messages.function.test.js","sourceRoot":"","sources":["../../../src/functions/get-agent-thread-messages.function.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAE/D,IAAI,CAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,MAAM,CAAC,SAAS,CAAC,sBAAsB,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC,CAAA;AAChF,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const getVirtualUserRunSteps: import("#pikku/addon/function").PikkuFunctionConfig<{
|
|
2
|
+
runId: string;
|
|
3
|
+
limit?: number;
|
|
4
|
+
offset?: number;
|
|
5
|
+
}, any[], "rpc" | "session", import("#pikku/addon/function").PikkuFunction<{
|
|
6
|
+
runId: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
offset?: number;
|
|
9
|
+
}, any[], "rpc" | "session", import("#pikku/addon/function").WiredServices> | import("#pikku/addon/function").PikkuFunctionSessionless<{
|
|
10
|
+
runId: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
}, any[], "rpc" | "session", import("#pikku/addon/function").WiredServices, unknown>, undefined, undefined>;
|
|
14
|
+
//# sourceMappingURL=get-virtual-user-run-steps.function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-virtual-user-run-steps.function.d.ts","sourceRoot":"","sources":["../../../src/functions/get-virtual-user-run-steps.function.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,sBAAsB;WACxB,MAAM;YAAU,MAAM;aAAW,MAAM;;WAAvC,MAAM;YAAU,MAAM;aAAW,MAAM;;WAAvC,MAAM;YAAU,MAAM;aAAW,MAAM;2GAoBhD,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { pikkuFunc } from '#pikku/addon/function';
|
|
2
|
+
/**
|
|
3
|
+
* One run's turns, in the order they happened.
|
|
4
|
+
*
|
|
5
|
+
* Its own call rather than a field on the run: a run at a 500-step budget
|
|
6
|
+
* carries more transcript than every other column together, so the list would
|
|
7
|
+
* pay for it on every row.
|
|
8
|
+
*
|
|
9
|
+
* SECURITY: the transcript is strictly more sensitive than the summary it
|
|
10
|
+
* belongs to — it carries the live ids and payloads the run actually sent.
|
|
11
|
+
*/
|
|
12
|
+
const MAX_STEPS = 500;
|
|
13
|
+
export const getVirtualUserRunSteps = pikkuFunc({
|
|
14
|
+
title: 'Get Virtual User Run Steps',
|
|
15
|
+
description: 'Returns every turn one virtual user run took: what it called, what came back, and what that cost.',
|
|
16
|
+
expose: true,
|
|
17
|
+
scopes: ['pikku:console:virtualUsers:read'],
|
|
18
|
+
func: async ({ virtualUserRunStore }, input) => {
|
|
19
|
+
if (!virtualUserRunStore) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
return await virtualUserRunStore.steps(input.runId, {
|
|
23
|
+
// A run's whole transcript at the largest budget pikku allows, and no
|
|
24
|
+
// more: the input is a plain type, so the ceiling cannot come from a
|
|
25
|
+
// schema the way the scaffolded read's does.
|
|
26
|
+
limit: Math.min(input?.limit ?? MAX_STEPS, MAX_STEPS),
|
|
27
|
+
offset: input?.offset,
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=get-virtual-user-run-steps.function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-virtual-user-run-steps.function.js","sourceRoot":"","sources":["../../../src/functions/get-virtual-user-run-steps.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD;;;;;;;;;GASG;AACH,MAAM,SAAS,GAAG,GAAG,CAAA;AAErB,MAAM,CAAC,MAAM,sBAAsB,GAAG,SAAS,CAG7C;IACA,KAAK,EAAE,4BAA4B;IACnC,WAAW,EACT,mGAAmG;IACrG,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,iCAAiC,CAAC;IAC3C,IAAI,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,OAAO,MAAM,mBAAmB,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE;YAClD,sEAAsE;YACtE,qEAAqE;YACrE,6CAA6C;YAC7C,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,SAAS,CAAC;YACrD,MAAM,EAAE,KAAK,EAAE,MAAM;SACtB,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const getVirtualUserRuns: import("#pikku/addon/function").PikkuFunctionConfig<{
|
|
2
|
+
persona?: string;
|
|
3
|
+
limit?: number;
|
|
4
|
+
offset?: number;
|
|
5
|
+
}, any[], "rpc" | "session", import("#pikku/addon/function").PikkuFunction<{
|
|
6
|
+
persona?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
offset?: number;
|
|
9
|
+
}, any[], "rpc" | "session", import("#pikku/addon/function").WiredServices> | import("#pikku/addon/function").PikkuFunctionSessionless<{
|
|
10
|
+
persona?: string;
|
|
11
|
+
limit?: number;
|
|
12
|
+
offset?: number;
|
|
13
|
+
}, any[], "rpc" | "session", import("#pikku/addon/function").WiredServices, unknown>, undefined, undefined>;
|
|
14
|
+
//# sourceMappingURL=get-virtual-user-runs.function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-virtual-user-runs.function.d.ts","sourceRoot":"","sources":["../../../src/functions/get-virtual-user-runs.function.ts"],"names":[],"mappings":"AAgBA,eAAO,MAAM,kBAAkB;cACjB,MAAM;YAAU,MAAM;aAAW,MAAM;;cAAvC,MAAM;YAAU,MAAM;aAAW,MAAM;;cAAvC,MAAM;YAAU,MAAM;aAAW,MAAM;2GA0BnD,CAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { pikkuFunc } from '#pikku/addon/function';
|
|
2
|
+
/**
|
|
3
|
+
* What the virtual users have been doing, newest first.
|
|
4
|
+
*
|
|
5
|
+
* Read off the host's own `virtualUserRunStore` rather than through the
|
|
6
|
+
* scaffolded RPCs, so the console shows a project's runs whether or not that
|
|
7
|
+
* project turned `scaffold.virtualUser` on — wiring the store is the only thing
|
|
8
|
+
* a run needs, and it is what a run already needs.
|
|
9
|
+
*
|
|
10
|
+
* SECURITY: an `adversarial` run's findings are working exploits carrying live
|
|
11
|
+
* ids. This is a privileged read, which is why it has a scope of its own rather
|
|
12
|
+
* than riding on the wirings one.
|
|
13
|
+
*/
|
|
14
|
+
const MAX_RUNS = 100;
|
|
15
|
+
export const getVirtualUserRuns = pikkuFunc({
|
|
16
|
+
title: 'Get Virtual User Runs',
|
|
17
|
+
description: 'Returns recorded virtual user runs, newest first. Accepts optional persona, limit and offset.',
|
|
18
|
+
expose: true,
|
|
19
|
+
scopes: ['pikku:console:virtualUsers:read'],
|
|
20
|
+
func: async ({ virtualUserRunStore }, input) => {
|
|
21
|
+
if (!virtualUserRunStore) {
|
|
22
|
+
return [];
|
|
23
|
+
}
|
|
24
|
+
const runs = await virtualUserRunStore.list({
|
|
25
|
+
persona: input?.persona,
|
|
26
|
+
// The scaffolded read bounds this through zod; nothing types a console
|
|
27
|
+
// function's input at runtime, so the ceiling is applied here instead of
|
|
28
|
+
// letting a caller ask the store for every run an app has ever recorded.
|
|
29
|
+
limit: Math.min(input?.limit ?? MAX_RUNS, MAX_RUNS),
|
|
30
|
+
offset: input?.offset,
|
|
31
|
+
});
|
|
32
|
+
return runs.map((run) => ({
|
|
33
|
+
...run,
|
|
34
|
+
createdAt: run.createdAt.toISOString(),
|
|
35
|
+
finishedAt: run.finishedAt ? run.finishedAt.toISOString() : null,
|
|
36
|
+
}));
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
//# sourceMappingURL=get-virtual-user-runs.function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-virtual-user-runs.function.js","sourceRoot":"","sources":["../../../src/functions/get-virtual-user-runs.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,QAAQ,GAAG,GAAG,CAAA;AAEpB,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAGzC;IACA,KAAK,EAAE,uBAAuB;IAC9B,WAAW,EACT,+FAA+F;IACjG,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,iCAAiC,CAAC;IAC3C,IAAI,EAAE,KAAK,EAAE,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC;YAC1C,OAAO,EAAE,KAAK,EAAE,OAAO;YACvB,uEAAuE;YACvE,yEAAyE;YACzE,yEAAyE;YACzE,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,QAAQ,EAAE,QAAQ,CAAC;YACnD,MAAM,EAAE,KAAK,EAAE,MAAM;SACtB,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YACxB,GAAG,GAAG;YACN,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,WAAW,EAAE;YACtC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;SACjE,CAAC,CAAC,CAAA;IACL,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A single-thread read is keyed by a caller-supplied `threadId`, so ownership
|
|
3
|
+
* cannot come from the request — it is derived from the session and checked
|
|
4
|
+
* against the stored thread's resourceId. The sibling list endpoints filter
|
|
5
|
+
* instead; a lookup of one thread has nothing to filter, so it is refused.
|
|
6
|
+
*
|
|
7
|
+
* A missing thread is refused rather than 404'd so it is indistinguishable from
|
|
8
|
+
* one owned by someone else — no existence oracle.
|
|
9
|
+
*/
|
|
10
|
+
export declare const isThreadOwner: import("#pikku/addon/auth").PikkuPermission<{
|
|
11
|
+
threadId: string;
|
|
12
|
+
}, import("../../.pikku/addon/function/pikku-function-types.gen.js").WiredServices>;
|
|
13
|
+
//# sourceMappingURL=is-thread-owner.permission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-thread-owner.permission.d.ts","sourceRoot":"","sources":["../../../src/functions/is-thread-owner.permission.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa;cAA+B,MAAM;mFAS9D,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { hasScopes } from '@pikku/core/scope';
|
|
2
|
+
import { canAccessThread } from '@pikku/core/agent';
|
|
3
|
+
import { pikkuPermission } from '#pikku/addon/auth';
|
|
4
|
+
const ADMIN_SCOPE_ROOT = 'admin';
|
|
5
|
+
/**
|
|
6
|
+
* A single-thread read is keyed by a caller-supplied `threadId`, so ownership
|
|
7
|
+
* cannot come from the request — it is derived from the session and checked
|
|
8
|
+
* against the stored thread's resourceId. The sibling list endpoints filter
|
|
9
|
+
* instead; a lookup of one thread has nothing to filter, so it is refused.
|
|
10
|
+
*
|
|
11
|
+
* A missing thread is refused rather than 404'd so it is indistinguishable from
|
|
12
|
+
* one owned by someone else — no existence oracle.
|
|
13
|
+
*/
|
|
14
|
+
export const isThreadOwner = pikkuPermission(async ({ agentRunService }, { threadId }, { session }) => {
|
|
15
|
+
if (hasScopes([ADMIN_SCOPE_ROOT], session?.scopes)) {
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
const thread = await agentRunService.getThread(threadId);
|
|
19
|
+
if (!thread)
|
|
20
|
+
return false;
|
|
21
|
+
return canAccessThread(thread.resourceId, session);
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=is-thread-owner.permission.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-thread-owner.permission.js","sourceRoot":"","sources":["../../../src/functions/is-thread-owner.permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAEnD,MAAM,gBAAgB,GAAG,OAAO,CAAA;AAEhC;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,eAAe,CAC1C,KAAK,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IACvD,IAAI,SAAS,CAAC,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACnD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;IACxD,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAA;IACzB,OAAO,eAAe,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AACpD,CAAC,CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-thread-owner.permission.test.d.ts","sourceRoot":"","sources":["../../../src/functions/is-thread-owner.permission.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import assert from 'node:assert/strict';
|
|
2
|
+
import { test } from 'node:test';
|
|
3
|
+
import { isThreadOwner } from './is-thread-owner.permission.js';
|
|
4
|
+
const services = {
|
|
5
|
+
agentRunService: {
|
|
6
|
+
getThread: async (threadId) => threadId === 'thread-1' ? { threadId, resourceId: 'alice' } : null,
|
|
7
|
+
},
|
|
8
|
+
};
|
|
9
|
+
const check = (session, threadId = 'thread-1') => isThreadOwner(services, { threadId }, { session });
|
|
10
|
+
test('the owning session is allowed', async () => {
|
|
11
|
+
assert.equal(await check({ userId: 'alice', scopes: [] }), true);
|
|
12
|
+
});
|
|
13
|
+
test("someone else's thread is refused", async () => {
|
|
14
|
+
assert.equal(await check({ userId: 'carol', scopes: [] }), false);
|
|
15
|
+
});
|
|
16
|
+
test('an admin reaches any thread', async () => {
|
|
17
|
+
assert.equal(await check({ userId: 'root', scopes: ['admin'] }), true);
|
|
18
|
+
});
|
|
19
|
+
test('a missing thread reads the same as one owned by someone else', async () => {
|
|
20
|
+
assert.equal(await check({ userId: 'alice', scopes: [] }, 'nope'), false);
|
|
21
|
+
});
|
|
22
|
+
test('a session with no principals is refused', async () => {
|
|
23
|
+
assert.equal(await check({ scopes: [] }), false);
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=is-thread-owner.permission.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-thread-owner.permission.test.js","sourceRoot":"","sources":["../../../src/functions/is-thread-owner.permission.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAA;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAA;AAE/D,MAAM,QAAQ,GAAG;IACf,eAAe,EAAE;QACf,SAAS,EAAE,KAAK,EAAE,QAAgB,EAAE,EAAE,CACpC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI;KACrE;CACO,CAAA;AAEV,MAAM,KAAK,GAAG,CAAC,OAAgB,EAAE,QAAQ,GAAG,UAAU,EAAE,EAAE,CACxD,aAAa,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAW,CAAC,CAAA;AAE7D,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;IAC/C,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;AAClE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;IAClD,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AACnE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;IAC7C,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAA;AACxE,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;IAC9E,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAA;AAClD,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Turns a persona loose now, rather than waiting for its schedule.
|
|
3
|
+
*
|
|
4
|
+
* Dispatches the project's own scaffolded `runVirtualUser` rather than starting
|
|
5
|
+
* a run itself: the persona lookup, the acted-upon check and the production
|
|
6
|
+
* guard live there, and a second copy of them in the console would eventually
|
|
7
|
+
* disagree with the first. The cost is that this needs `scaffold.virtualUser`
|
|
8
|
+
* on, while reading runs does not — so the absence is reported as the missing
|
|
9
|
+
* scaffold it is, not as a broken button.
|
|
10
|
+
*
|
|
11
|
+
* SECURITY: its own scope, separate from reading. A run acts as a real user
|
|
12
|
+
* against the real API, and an adversarial one is trying to break things.
|
|
13
|
+
*/
|
|
14
|
+
export declare const startVirtualUserRun: import("#pikku/addon/function").PikkuFunctionConfig<{
|
|
15
|
+
persona: string;
|
|
16
|
+
disposition?: string;
|
|
17
|
+
goals?: string[];
|
|
18
|
+
}, {
|
|
19
|
+
runId: string;
|
|
20
|
+
}, "rpc" | "session", import("#pikku/addon/function").PikkuFunction<{
|
|
21
|
+
persona: string;
|
|
22
|
+
disposition?: string;
|
|
23
|
+
goals?: string[];
|
|
24
|
+
}, {
|
|
25
|
+
runId: string;
|
|
26
|
+
}, "rpc" | "session", import("#pikku/addon/function").WiredServices> | import("#pikku/addon/function").PikkuFunctionSessionless<{
|
|
27
|
+
persona: string;
|
|
28
|
+
disposition?: string;
|
|
29
|
+
goals?: string[];
|
|
30
|
+
}, {
|
|
31
|
+
runId: string;
|
|
32
|
+
}, "rpc" | "session", import("#pikku/addon/function").WiredServices, unknown>, undefined, undefined>;
|
|
33
|
+
//# sourceMappingURL=start-virtual-user-run.function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-virtual-user-run.function.d.ts","sourceRoot":"","sources":["../../../src/functions/start-virtual-user-run.function.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,mBAAmB;aACnB,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;WAChD,MAAM;;aADJ,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;WAChD,MAAM;;aADJ,MAAM;kBAAgB,MAAM;YAAU,MAAM,EAAE;;WAChD,MAAM;oGAmBf,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { pikkuFunc } from '#pikku/addon/function';
|
|
2
|
+
/**
|
|
3
|
+
* Turns a persona loose now, rather than waiting for its schedule.
|
|
4
|
+
*
|
|
5
|
+
* Dispatches the project's own scaffolded `runVirtualUser` rather than starting
|
|
6
|
+
* a run itself: the persona lookup, the acted-upon check and the production
|
|
7
|
+
* guard live there, and a second copy of them in the console would eventually
|
|
8
|
+
* disagree with the first. The cost is that this needs `scaffold.virtualUser`
|
|
9
|
+
* on, while reading runs does not — so the absence is reported as the missing
|
|
10
|
+
* scaffold it is, not as a broken button.
|
|
11
|
+
*
|
|
12
|
+
* SECURITY: its own scope, separate from reading. A run acts as a real user
|
|
13
|
+
* against the real API, and an adversarial one is trying to break things.
|
|
14
|
+
*/
|
|
15
|
+
export const startVirtualUserRun = pikkuFunc({
|
|
16
|
+
title: 'Start a Virtual User Run',
|
|
17
|
+
description: 'Runs a declared persona against this application now. Returns a run id; the result arrives in the run list.',
|
|
18
|
+
expose: true,
|
|
19
|
+
scopes: ['pikku:console:virtualUsers:run'],
|
|
20
|
+
func: async ({ metaService }, input, { rpc }) => {
|
|
21
|
+
const rpcs = await metaService?.getRpcMeta();
|
|
22
|
+
if (!rpcs?.runVirtualUser) {
|
|
23
|
+
throw new Error('This application has no runVirtualUser function — turn on `scaffold.virtualUser` in pikku.config.json and run `pikku all` to generate it.');
|
|
24
|
+
}
|
|
25
|
+
// `exposed` rather than `invoke`: the name belongs to the host application,
|
|
26
|
+
// not to this addon, so there is no typed map for it here — and going in
|
|
27
|
+
// through the exposed door is what the console is doing anyway.
|
|
28
|
+
return (await rpc.exposed('runVirtualUser', input));
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=start-virtual-user-run.function.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"start-virtual-user-run.function.js","sourceRoot":"","sources":["../../../src/functions/start-virtual-user-run.function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEjD;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAG1C;IACA,KAAK,EAAE,0BAA0B;IACjC,WAAW,EACT,6GAA6G;IAC/G,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,CAAC,gCAAgC,CAAC;IAC1C,IAAI,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,MAAM,WAAW,EAAE,UAAU,EAAE,CAAA;QAC5C,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,2IAA2I,CAC5I,CAAA;QACH,CAAC;QACD,4EAA4E;QAC5E,yEAAyE;QACzE,gEAAgE;QAChE,OAAO,CAAC,MAAM,GAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAsB,CAAA;IAC3E,CAAC;CACF,CAAC,CAAA"}
|
package/dist/src/scopes.js
CHANGED
|
@@ -96,6 +96,17 @@ defineScope({
|
|
|
96
96
|
},
|
|
97
97
|
},
|
|
98
98
|
},
|
|
99
|
+
virtualUsers: {
|
|
100
|
+
description: 'Virtual user runs and their transcripts',
|
|
101
|
+
scopes: {
|
|
102
|
+
read: {
|
|
103
|
+
description: 'Read what the virtual users found and every turn they took',
|
|
104
|
+
},
|
|
105
|
+
run: {
|
|
106
|
+
description: 'Turn a persona loose on this application',
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
},
|
|
99
110
|
db: {
|
|
100
111
|
description: 'The database schema',
|
|
101
112
|
scopes: {
|
package/dist/src/scopes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/scopes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scopes.js","sourceRoot":"","sources":["../../src/scopes.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pikku/addon-console",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.45",
|
|
4
4
|
"description": "Console addon for Pikku — functions powering the Pikku Console UI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"imports": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"peerDependencies": {
|
|
39
39
|
"@pikku/better-auth": "^0.12.26",
|
|
40
|
-
"@pikku/core": "^0.12.
|
|
40
|
+
"@pikku/core": "^0.12.90"
|
|
41
41
|
},
|
|
42
42
|
"peerDependenciesMeta": {
|
|
43
43
|
"@pikku/better-auth": {
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"@pikku/better-auth": "^0.12.26",
|
|
49
|
-
"@pikku/cli": "^0.12.
|
|
50
|
-
"@pikku/core": "^0.12.
|
|
49
|
+
"@pikku/cli": "^0.12.112",
|
|
50
|
+
"@pikku/core": "^0.12.90",
|
|
51
51
|
"oauth2-mock-server": "^9.1.0",
|
|
52
52
|
"typescript": "^6.0.3"
|
|
53
53
|
},
|