@sanoma-ai/workflows 0.11.15 → 0.11.17

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 (117) hide show
  1. package/README.md +14 -3
  2. package/dist/app-steps.d.ts +17 -0
  3. package/dist/app-steps.js +43 -0
  4. package/dist/app-steps.js.map +1 -0
  5. package/dist/app-workflows.d.ts +170 -0
  6. package/dist/app-workflows.js +107 -0
  7. package/dist/app-workflows.js.map +1 -0
  8. package/dist/apply-steps.js +3 -9
  9. package/dist/apply-steps.js.map +1 -1
  10. package/dist/approvals.d.ts +1 -1
  11. package/dist/approvals.js +3 -0
  12. package/dist/approvals.js.map +1 -1
  13. package/dist/call.d.ts +2 -1
  14. package/dist/call.js +2 -1
  15. package/dist/call.js.map +1 -1
  16. package/dist/change-steps.js +11 -17
  17. package/dist/change-steps.js.map +1 -1
  18. package/dist/chat-steps.d.ts +5 -0
  19. package/dist/chat-steps.js +107 -0
  20. package/dist/chat-steps.js.map +1 -0
  21. package/dist/chat-workflow.d.ts +43 -0
  22. package/dist/chat-workflow.js +47 -0
  23. package/dist/chat-workflow.js.map +1 -0
  24. package/dist/chats.d.ts +23 -4
  25. package/dist/chats.js +54 -7
  26. package/dist/chats.js.map +1 -1
  27. package/dist/client.d.ts +42 -31
  28. package/dist/client.js +118 -105
  29. package/dist/client.js.map +1 -1
  30. package/dist/config.d.ts +20 -0
  31. package/dist/config.js +55 -4
  32. package/dist/config.js.map +1 -1
  33. package/dist/db/company.d.ts +259 -2
  34. package/dist/db/company.js +32 -1
  35. package/dist/db/company.js.map +1 -1
  36. package/dist/db.d.ts +15 -0
  37. package/dist/db.js +42 -2
  38. package/dist/db.js.map +1 -1
  39. package/dist/description.d.ts +6 -3
  40. package/dist/description.js +4 -3
  41. package/dist/description.js.map +1 -1
  42. package/dist/follow-steps.d.ts +8 -0
  43. package/dist/follow-steps.js +113 -0
  44. package/dist/follow-steps.js.map +1 -0
  45. package/dist/follow-workflow.d.ts +56 -0
  46. package/dist/follow-workflow.js +50 -0
  47. package/dist/follow-workflow.js.map +1 -0
  48. package/dist/index.d.ts +10 -5
  49. package/dist/index.js +9 -4
  50. package/dist/index.js.map +1 -1
  51. package/dist/local-sandbox.d.ts +10 -0
  52. package/dist/local-sandbox.js +130 -0
  53. package/dist/local-sandbox.js.map +1 -0
  54. package/dist/op.d.ts +9 -2
  55. package/dist/op.js.map +1 -1
  56. package/dist/paths.d.ts +9 -0
  57. package/dist/paths.js +20 -4
  58. package/dist/paths.js.map +1 -1
  59. package/dist/resource.d.ts +7 -1
  60. package/dist/resource.js +5 -1
  61. package/dist/resource.js.map +1 -1
  62. package/dist/run.d.ts +39 -0
  63. package/dist/run.js +15 -0
  64. package/dist/run.js.map +1 -1
  65. package/dist/sandbox-contract.d.ts +100 -0
  66. package/dist/sandbox-contract.js +26 -0
  67. package/dist/sandbox-contract.js.map +1 -0
  68. package/dist/sandbox.d.ts +10 -0
  69. package/dist/sandbox.js +42 -4
  70. package/dist/sandbox.js.map +1 -1
  71. package/dist/scenario.d.ts +19 -0
  72. package/dist/scenario.js.map +1 -1
  73. package/dist/schedules.d.ts +11 -3
  74. package/dist/schedules.js +15 -3
  75. package/dist/schedules.js.map +1 -1
  76. package/dist/seal.d.ts +7 -0
  77. package/dist/seal.js +14 -2
  78. package/dist/seal.js.map +1 -1
  79. package/dist/shared.d.ts +34 -2
  80. package/dist/shared.js +39 -2
  81. package/dist/shared.js.map +1 -1
  82. package/dist/worker.d.ts +8 -0
  83. package/dist/worker.js +116 -10
  84. package/dist/worker.js.map +1 -1
  85. package/drizzle/company/0002_runs_tell_the_app.sql +27 -0
  86. package/drizzle/company/meta/0002_snapshot.json +819 -0
  87. package/drizzle/company/meta/_journal.json +7 -0
  88. package/package.json +1 -1
  89. package/src/app-steps.ts +67 -0
  90. package/src/app-workflows.ts +251 -0
  91. package/src/apply-steps.ts +3 -9
  92. package/src/approvals.ts +3 -1
  93. package/src/call.ts +2 -1
  94. package/src/change-steps.ts +10 -17
  95. package/src/chat-steps.ts +117 -0
  96. package/src/chat-workflow.ts +69 -0
  97. package/src/chats.ts +80 -14
  98. package/src/client.ts +154 -109
  99. package/src/config.ts +66 -3
  100. package/src/db/company.ts +49 -2
  101. package/src/db.ts +51 -3
  102. package/src/description.ts +4 -3
  103. package/src/follow-steps.ts +129 -0
  104. package/src/follow-workflow.ts +88 -0
  105. package/src/index.ts +32 -3
  106. package/src/local-sandbox.ts +132 -0
  107. package/src/op.ts +9 -2
  108. package/src/paths.ts +22 -4
  109. package/src/resource.ts +16 -2
  110. package/src/run.ts +41 -0
  111. package/src/sandbox-contract.ts +114 -0
  112. package/src/sandbox.ts +41 -4
  113. package/src/scenario.ts +17 -0
  114. package/src/schedules.ts +19 -4
  115. package/src/seal.ts +16 -2
  116. package/src/shared.ts +47 -2
  117. package/src/worker.ts +149 -10
@@ -0,0 +1,113 @@
1
+ import { DBOS } from "@dbos-inc/dbos-sdk";
2
+ import { BASE, repositoryOf } from "./change.js";
3
+ import { errorCode, vendorCodeOf } from "./errors.js";
4
+ import { warn } from "./log.js";
5
+ import { runNow } from "./run.js";
6
+ import { APPLY_WORKFLOW, HOST_CHECK_AGENT, isEnded } from "./shared.js";
7
+ import { draftOf } from "./source.js";
8
+ // The follow workflow's steps (`follow-workflow.ts` is held to the workflow lint and imports no
9
+ // DBOS): where an event lands, `main` followed and its hosts applied, a draft's change told what
10
+ // its host says. Each reads its run from `currentRun`; the worker's own client tells and reads
11
+ // the changes, as `host-check`, and every write to the checkout is one of the worker's, one at a
12
+ // time (`WorkerState.serially`).
13
+ /** Whether two references name one repository: a host's names are compared without case. */
14
+ const sameRepo = (a, b) => a.owner.toLowerCase() === b.owner.toLowerCase() && a.name.toLowerCase() === b.name.toLowerCase();
15
+ export function followSteps({ remotes, hosts }) {
16
+ /** The worker's repository on its host (`repositoryOf`); undefined with no repository, remote or half for it. */
17
+ const repository = async (run) => {
18
+ const { source } = run.state;
19
+ if (!source)
20
+ return undefined;
21
+ return repositoryOf(remotes, run.state.secrets, source).catch((err) => {
22
+ if (["no_remote", "no_remote_half"].includes(vendorCodeOf(err) ?? ""))
23
+ return undefined;
24
+ throw err;
25
+ });
26
+ };
27
+ return {
28
+ where: (event) => DBOS.runStep(async () => {
29
+ const main = event.kind === "pushed" && event.branch === BASE;
30
+ const id = draftOf(event.branch);
31
+ if (!main && id === undefined)
32
+ return { ignored: `${event.branch} is neither ${BASE} nor a draft's branch` };
33
+ const run = runNow("A follow step");
34
+ if (!run.state.source)
35
+ return { ignored: "This worker has no repository" };
36
+ const found = await repository(run);
37
+ if (!found)
38
+ return { ignored: "This worker's repository has no remote on a host a connector reads" };
39
+ if (!sameRepo(found.repo, event.repo)) {
40
+ return { ignored: `The event is ${event.repo.owner}/${event.repo.name}'s, not this repository's` };
41
+ }
42
+ return event.kind === "pushed" && main ? { main: event.head } : { draft: id };
43
+ }, { name: "follow:where" }),
44
+ async main(head) {
45
+ const run = runNow("A follow step");
46
+ const deploy = `deploy:${head}`;
47
+ const declared = await DBOS.runStep(async () => {
48
+ const client = await run.state.client();
49
+ const [deployed, deploying] = await Promise.all([client.run(deploy), client.changeDeploying()]);
50
+ if (deployed || deploying)
51
+ return undefined;
52
+ // First, as a change's deploy does: the hosts, and what apply reads, are then main's.
53
+ const moved = await run.state.followMain();
54
+ if (!("revision" in moved)) {
55
+ // Nothing recorded as `deploy:<head>`: a later push deploys it.
56
+ throw new Error(`${BASE} was not deployed: the checkout did not follow it: ${"skipped" in moved ? moved.skipped : moved.error}`);
57
+ }
58
+ return run.state.workflows.has(APPLY_WORKFLOW) ? await hosts() : [];
59
+ }, { name: "follow:main" });
60
+ if (!declared)
61
+ return { ignored: `${deploy} has run, or a change is deploying ${BASE}` };
62
+ if (!declared.length)
63
+ return { followed: "main" };
64
+ // As the run's own actor, `host-check` (`SanomaClient.follow`).
65
+ await run.state.startRun(APPLY_WORKFLOW, deploy, { input: { only: declared }, startedBy: run.actor });
66
+ return { followed: "main", deploy };
67
+ },
68
+ draft: (event, id) => DBOS.runStep(async () => {
69
+ const run = runNow("A follow step");
70
+ const change = await (await run.state.client()).change(id);
71
+ if (!change || isEnded(change.status))
72
+ return { ignored: `The draft ${id} has no open change` };
73
+ const key = `${event.kind}:${event.branch}:`;
74
+ if (event.kind === "closed") {
75
+ // A pull request of an earlier change of the draft is not this one's.
76
+ if (event.number !== change.state.pullRequest?.number) {
77
+ return { ignored: `Pull request #${event.number} is not the open change's` };
78
+ }
79
+ return {
80
+ told: event.merged && event.sha !== undefined ? { kind: "merged", sha: event.sha } : { kind: "closed" },
81
+ key: `${key}${event.number}:${event.sha ?? "closed"}`,
82
+ };
83
+ }
84
+ if (change.state.head === event.head)
85
+ return { ignored: `The change is at ${event.head} already` };
86
+ const found = await repository(run);
87
+ if (!found?.source.follow)
88
+ return { ignored: "This repository cannot follow its remote" };
89
+ const { source, url, host } = found;
90
+ const fetched = await run.state.serially(async () => {
91
+ const local = await Promise.resolve(source.head(event.branch)).catch(() => undefined);
92
+ if (local === event.head)
93
+ return false;
94
+ const moved = await source.follow({ url, token: await host.token(), ref: event.branch });
95
+ if ("skipped" in moved)
96
+ warn(`${event.branch} did not take the host's commits: ${moved.skipped}`);
97
+ return !("skipped" in moved);
98
+ });
99
+ if (!fetched)
100
+ return { ignored: `${event.branch} holds ${event.head} already, or cannot take it` };
101
+ return { told: { kind: "commits" }, key: `${key}${event.head}` };
102
+ }, { name: "follow:draft" }),
103
+ tell: (id, told, key) => DBOS.runStep(async () => {
104
+ const client = await runNow("A follow step").state.client();
105
+ await client.changeEvent(id, told, { by: HOST_CHECK_AGENT, key }).catch((err) => {
106
+ // Ended, or gone, since it was read: nothing to tell.
107
+ if (!["run_ended", "run_not_found"].includes(errorCode(err) ?? ""))
108
+ throw err;
109
+ });
110
+ }, { name: "follow:tell" }),
111
+ };
112
+ }
113
+ //# sourceMappingURL=follow-steps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-steps.js","sourceRoot":"","sources":["../src/follow-steps.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { z } from "zod";
2
+ import type { ChangeEvent } from "./change.ts";
3
+ import { type WorkflowDefinition } from "./define.ts";
4
+ import type { RemoteEvent } from "./source.ts";
5
+ /** What a host's webhook says happened (`RemoteEvent`): a branch pushed, or a pull request closed (merged or not). */
6
+ export declare const RemoteEventSchema: z.ZodType<RemoteEvent>;
7
+ /**
8
+ * What a follow did: nothing, saying why (`ignored`); `main` followed, with the run that applies
9
+ * the declared hosts (`deploy:<head>`) when there are any; or the change of a draft told an event.
10
+ */
11
+ export type FollowOutput = {
12
+ ignored: string;
13
+ } | {
14
+ followed: "main";
15
+ deploy?: string;
16
+ } | {
17
+ change: string;
18
+ told: ChangeEvent["kind"];
19
+ };
20
+ /** Where an event lands (`FollowSteps.where`): nothing, saying why; a push to `main`, of its head; or a draft's branch. */
21
+ export type FollowTarget = {
22
+ ignored: string;
23
+ } | {
24
+ main: string;
25
+ } | {
26
+ draft: string;
27
+ };
28
+ /** What a follow does that is no operation, each a step of its own (`follow-steps.ts`). */
29
+ export interface FollowSteps {
30
+ /**
31
+ * Where the event lands: ignored when the worker has no repository, the event is another
32
+ * repository's, or its branch is neither `main` (a push) nor a draft's.
33
+ */
34
+ where(event: RemoteEvent): Promise<FollowTarget>;
35
+ /**
36
+ * After a push of `head` to `main`: the checkout follows it, then apply on the declared hosts as
37
+ * `host-check`, as the run `deploy:<head>`, without waiting for it. Nothing while a change is
38
+ * merging or deploying, which does both itself; throws when the checkout cannot follow.
39
+ */
40
+ main(head: string): Promise<FollowOutput>;
41
+ /**
42
+ * The event for the draft `id`'s open change, when it is one to tell: a push's commits fetched
43
+ * into the draft first (none when the draft or the change is at that head already, or it cannot
44
+ * fast-forward: warned), a closed pull request of this change as `merged` or `closed`.
45
+ */
46
+ draft(event: RemoteEvent, id: string): Promise<{
47
+ told: ChangeEvent;
48
+ key: string;
49
+ } | {
50
+ ignored: string;
51
+ }>;
52
+ /** Tells the change of the draft `id` the event, once under `key`, as `host-check`: nothing once its run has ended. */
53
+ tell(id: string, told: ChangeEvent, key: string): Promise<void>;
54
+ }
55
+ /** The built-in follow workflow over `steps`: `resolveConfig` adds it to every config. */
56
+ export declare function followWorkflow(steps: FollowSteps): WorkflowDefinition<any, any>;
@@ -0,0 +1,50 @@
1
+ import { z } from "zod";
2
+ import { defineWorkflow } from "./define.js";
3
+ // The built-in `follow` workflow: what a git host's webhook says happened to the company's
4
+ // repository, done by the worker, which has the checkout. The app verifies the webhook and starts
5
+ // the run (`SanomaClient.follow`, as the runtime's agent `host-check`, one run per event); what it
6
+ // does is no operation, so each part is a step of `follow-steps.ts`. A workflow like any other,
7
+ // held to the same lint.
8
+ const RepoRefSchema = z.object({ owner: z.string().min(1), name: z.string().min(1) });
9
+ /** What a host's webhook says happened (`RemoteEvent`): a branch pushed, or a pull request closed (merged or not). */
10
+ export const RemoteEventSchema = z.discriminatedUnion("kind", [
11
+ z.object({ kind: z.literal("pushed"), repo: RepoRefSchema, branch: z.string().min(1), head: z.string().min(1) }),
12
+ z.object({
13
+ kind: z.literal("closed"),
14
+ repo: RepoRefSchema,
15
+ branch: z.string().min(1),
16
+ number: z.number().int(),
17
+ merged: z.boolean(),
18
+ sha: z.string().min(1).optional(),
19
+ }),
20
+ ]);
21
+ /** The built-in follow workflow over `steps`: `resolveConfig` adds it to every config. */
22
+ export function followWorkflow(steps) {
23
+ return defineWorkflow({
24
+ // The literal, held to the one name: the outline finds a workflow by a string, or a const of its own file.
25
+ name: "follow",
26
+ title: "Follow the repository's host",
27
+ trigger: "manual",
28
+ input: RemoteEventSchema,
29
+ uses: [],
30
+ run: async (_ctx, event) => {
31
+ const at = await steps.where(event);
32
+ let output;
33
+ if ("ignored" in at)
34
+ output = at;
35
+ else if ("main" in at)
36
+ output = await steps.main(at.main);
37
+ else {
38
+ const found = await steps.draft(event, at.draft);
39
+ if ("ignored" in found)
40
+ output = found;
41
+ else {
42
+ await steps.tell(at.draft, found.told, found.key);
43
+ output = { change: at.draft, told: found.told.kind };
44
+ }
45
+ }
46
+ return output;
47
+ },
48
+ });
49
+ }
50
+ //# sourceMappingURL=follow-workflow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"follow-workflow.js","sourceRoot":"","sources":["../src/follow-workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAA2B,MAAM,aAAa,CAAC;AAItE,2FAA2F;AAC3F,kGAAkG;AAClG,mGAAmG;AACnG,gGAAgG;AAChG,yBAAyB;AAEzB,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAEtF,sHAAsH;AACtH,MAAM,CAAC,MAAM,iBAAiB,GAA2B,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE;IACpF,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChH,CAAC,CAAC,MAAM,CAAC;QACP,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;QACzB,IAAI,EAAE,aAAa;QACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QACzB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACxB,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE;QACnB,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KAClC,CAAC;CACH,CAAC,CAAC;AAqCH,0FAA0F;AAC1F,MAAM,UAAU,cAAc,CAAC,KAAkB;IAC/C,OAAO,cAAc,CAAC;QACpB,2GAA2G;QAC3G,IAAI,EAAE,QAAyC;QAC/C,KAAK,EAAE,8BAA8B;QACrC,OAAO,EAAE,QAAQ;QACjB,KAAK,EAAE,iBAAiB;QACxB,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAyB,EAAE;YAChD,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACpC,IAAI,MAAoB,CAAC;YACzB,IAAI,SAAS,IAAI,EAAE;gBAAE,MAAM,GAAG,EAAE,CAAC;iBAC5B,IAAI,MAAM,IAAI,EAAE;gBAAE,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;iBACrD,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;gBACjD,IAAI,SAAS,IAAI,KAAK;oBAAE,MAAM,GAAG,KAAK,CAAC;qBAClC,CAAC;oBACJ,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;oBAClD,MAAM,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACvD,CAAC;YACH,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,16 +1,19 @@
1
- export { type CallContext, CLIENT_IP_HEADER, requestOrigin, sameOrigin, type Connector, type ConnectorSetup, type ConnectorVendor, type DatabasePreparation, type Driver, type DriverEnv, type DriverFn, defineConnector, DriverError, type Effect, isOp, isSvgElement, INVITE_SECONDS, type LoginContext, type LoginHalf, type LoginIdentity, type LoginMethod, type ModelContext, type Op, type OpSpec, type ResourceGroup, retryableStatus, type SignInMethod, type SocialClients, type VendorInfo, withSetup, } from "./op.ts";
1
+ export { type CallContext, CLIENT_IP_HEADER, requestOrigin, sameOrigin, type Connector, type ConnectorSetup, type ConnectorVendor, type DatabasePreparation, type Driver, type DriverEnv, type DriverFn, defineConnector, DriverError, type Effect, isOp, isSvgElement, INVITE_SECONDS, type LoginContext, type LoginHalf, type LoginIdentity, type LoginMethod, type ModelContext, type Op, type OpSpec, type ResourceGroup, retryableStatus, type SignInMethod, type SocialClients, VENDOR, type VendorInfo, withSetup, } from "./op.ts";
2
2
  export { SanomaPackageField, vendorInfo } from "./vendor-info.ts";
3
3
  export { defineWorkflow, Principal, type ApprovalRequest, type ApprovalResult, type ApprovalState, type Approver, type Builtin, type Ctx, type SleepRequest, type StartedBy, type StepOptions, type Trigger, type Use, type WorkflowDefinition, } from "./define.ts";
4
4
  export { compareDeclared, type Declared, type Declaring, defineResource, diffDeclared, type FieldReference, type PlanAction, type References, type Resource, type ResourceFields, type ResourceOps, type ResourceSpec, valueAt, withoutWriteOnly, } from "./resource.ts";
5
5
  export { type DnsRecord, dnsRecord } from "./dns.ts";
6
- export { declaredWakeup, defineConfig, envWakeup, type Login, readRootSnapshot, resolveConfig, resolveDatabaseUrl, type ResolvedConfig, type SanomaConfig, } from "./config.ts";
6
+ export { declaredWakeup, defineConfig, envWakeup, joinDeclarations, type Login, readRootSnapshot, resolveConfig, resolveDatabaseUrl, type ResolvedConfig, type SanomaConfig, } from "./config.ts";
7
7
  export { type AppEntry, appSourceOf, readApps } from "./apps.ts";
8
8
  export { type AppDefinition, defineApp } from "./definitions.ts";
9
- export { appFolders, APPS_DIR, filesUnder, kindDirs } from "./paths.ts";
9
+ export { appFolders, APPS_DIR, declarationFiles, filesUnder, kindDirs } from "./paths.ts";
10
10
  export { isCollection } from "./collection.ts";
11
11
  export { type CredentialStatus, credentialsOf } from "./env.ts";
12
12
  export { APPLY_WORKFLOW, ApplyInput, type ApplyPlan, type ApplyReport, type ApplyResult, type PlanAnswer, type PlanStep, } from "./apply.ts";
13
13
  export { CALL_WORKFLOW, CallInput } from "./call-workflow.ts";
14
+ export { AdoptInput, type AppApi, type AppStepContext, type AppSteps, type ChatTurnContext, ConnectExistingInput, type ConnectExistingOutput, GoLiveHostInput, GoLiveInput, type GoLiveOutput, PatchInput, type PatchOutput, type Written, } from "./app-workflows.ts";
15
+ export { type FollowOutput } from "./follow-workflow.ts";
16
+ export { ChatTurnInput, type ChatTurnOutput } from "./chat-workflow.ts";
14
17
  export { ADMIN, type ChangeDecision, type ChangeDeploy, type ChangeEvent, ChangeFacts, ChangeInput, changeOps, type ChangeReport, type ChangeState, type ChangeVerified, isRules, mayDeclarePeople, runtimeHold, touchesOf, } from "./change.ts";
15
18
  export { isDirect } from "./direct.ts";
16
19
  export { DRIFT_WORKFLOW, type DriftDeclared, type DriftField, type DriftReport, type DriftResult, type DriftStatus, } from "./drift.ts";
@@ -26,13 +29,15 @@ export type { RunArgs } from "./run.ts";
26
29
  export { startWorker, type Worker, type WorkerOptions } from "./worker.ts";
27
30
  export { superviseWorker, type Supervisor, type SupervisorOptions } from "./supervisor.ts";
28
31
  export type { DeadlineSource, Deadlines, SelfStop, Wait } from "./deadlines.ts";
29
- export { nextFire, nextScheduledFire } from "./schedules.ts";
32
+ export { nextFire, nextScheduledFire, timeMatcherFile, type TimeMatcherClass, useTimeMatcher } from "./schedules.ts";
30
33
  export { generateSecret, isSecret, memorySecrets, type Resolved, resolveSecrets, type Secret, type Secrets, } from "./secret.ts";
31
34
  export { type AppMerge, type CheckResult, type Draft, draftBranch, type DraftDiff, defaultBranch, draftOf, type HostEnforcement, type PullRequest, type RemoteContext, type RemoteEvent, type RemoteHalf, remoteFor, type RepoRef, resolveRevision, SOURCE_RESOLVE, type Source, type SourceHost, } from "./source.ts";
32
35
  export type { HostCapabilities, HostLifetime, HostOutputs, HostSpec } from "./host.ts";
33
36
  export { RUNTIME_IMAGE, RUNTIME_PORT, runtimeImage, sourceKeyId, UNNAMED, wakeUrlOf } from "./host.ts";
34
37
  export { cloneUrl, deriveHosts, type HostFacts, hostFacts, type HostRootFacts, hostRootFacts, DEPLOY_KEY_TITLE, DEPLOY_KEY_TYPE, GITHUB_APP, githubRepository, HOST_SIGNING_KEY, installedSanoma, originUrl, SOURCE_KEY, sourceRepository, wokenBy, } from "./host-derive.ts";
35
38
  export { checkDatabase, type DatabaseCapabilities, type DatabaseOutputs, type DatabaseSpec, databaseUrlSecret, storeDatabaseUrl, } from "./database.ts";
39
+ export { type Box, type Process, type SandboxBackend, type SandboxCapabilities, type SandboxContext, type SandboxOutputs, type SandboxSpec, } from "./sandbox-contract.ts";
40
+ export { LOCAL_SANDBOX, localBackend } from "./local-sandbox.ts";
36
41
  export type { Chat, Chats } from "./chats.ts";
37
42
  export type { Tokens } from "./tokens.ts";
38
43
  export { type InviteRequest, openInvite, sealInvite, sealLoginCode } from "./seal.ts";
@@ -40,7 +45,7 @@ export { postInvite, sanoma } from "./runtime-ops.ts";
40
45
  export { sourceKeyPair, sshPublicKey } from "./ssh-key.ts";
41
46
  export { checkWakeup, type DeclaredWakeup, type EnvWakeup, HOST_URL, WAKE_PATH, type WakeupOutputs, type WakeupRegistration, type WakeupSpec, wakeupHostTypes, } from "./wakeup.ts";
42
47
  export { type CallOptions, type ChangesFilter, type ChangeView, type ClientOptions, type ConnectionReview, SanomaClient, type RunsFilter, type RunSummary, type StartOptions, type StoredSecret, } from "./client.ts";
43
- export { dbosClient } from "./db.ts";
48
+ export { type AppBehind, dbosClient } from "./db.ts";
44
49
  export { type RootSnapshot, useRootSnapshot } from "./bundled.ts";
45
50
  export { checkPreparedOnly } from "./db.ts";
46
51
  export { type CedarWasm, useCedarWasm } from "./schema.ts";
package/dist/index.js CHANGED
@@ -1,19 +1,22 @@
1
- export { CLIENT_IP_HEADER, requestOrigin, sameOrigin, defineConnector, DriverError, isOp, isSvgElement, INVITE_SECONDS, retryableStatus, withSetup, } from "./op.js";
1
+ export { CLIENT_IP_HEADER, requestOrigin, sameOrigin, defineConnector, DriverError, isOp, isSvgElement, INVITE_SECONDS, retryableStatus, VENDOR, withSetup, } from "./op.js";
2
2
  export { SanomaPackageField, vendorInfo } from "./vendor-info.js";
3
3
  export { defineWorkflow, Principal, } from "./define.js";
4
4
  export { compareDeclared, defineResource, diffDeclared, valueAt, withoutWriteOnly, } from "./resource.js";
5
5
  export { dnsRecord } from "./dns.js";
6
- export { declaredWakeup, defineConfig, envWakeup, readRootSnapshot, resolveConfig, resolveDatabaseUrl, } from "./config.js";
6
+ export { declaredWakeup, defineConfig, envWakeup, joinDeclarations, readRootSnapshot, resolveConfig, resolveDatabaseUrl, } from "./config.js";
7
7
  // An app's `app.ts` (`defineApp`), and where the launcher finds an app's workflows and data file.
8
8
  export { appSourceOf, readApps } from "./apps.js";
9
9
  export { defineApp } from "./definitions.js";
10
- export { appFolders, APPS_DIR, filesUnder, kindDirs } from "./paths.js";
10
+ export { appFolders, APPS_DIR, declarationFiles, filesUnder, kindDirs } from "./paths.js";
11
11
  // `sanoma` itself (the people types' constructors) is at `@sanoma-ai/workflows/resources`, for data files.
12
12
  // `collection()` itself is at `@sanoma-ai/workflows/data`, for `resources/data.ts`; this tells one apart, as the launcher does.
13
13
  export { isCollection } from "./collection.js";
14
14
  export { credentialsOf } from "./env.js";
15
15
  export { APPLY_WORKFLOW, ApplyInput, } from "./apply.js";
16
16
  export { CALL_WORKFLOW, CallInput } from "./call-workflow.js";
17
+ export { AdoptInput, ConnectExistingInput, GoLiveHostInput, GoLiveInput, PatchInput, } from "./app-workflows.js";
18
+ export {} from "./follow-workflow.js";
19
+ export { ChatTurnInput } from "./chat-workflow.js";
17
20
  export { ADMIN, ChangeFacts, ChangeInput, changeOps, isRules, mayDeclarePeople, runtimeHold, touchesOf, } from "./change.js";
18
21
  export { isDirect } from "./direct.js";
19
22
  export { DRIFT_WORKFLOW, } from "./drift.js";
@@ -26,13 +29,15 @@ export { ApprovalMessage, APPROVALS_EVENT, ApprovalWithdrawal, decisionEventOf }
26
29
  export { RUNTIME_VERSION } from "./version.js";
27
30
  export { startWorker } from "./worker.js";
28
31
  export { superviseWorker } from "./supervisor.js";
29
- export { nextFire, nextScheduledFire } from "./schedules.js";
32
+ export { nextFire, nextScheduledFire, timeMatcherFile, useTimeMatcher } from "./schedules.js";
30
33
  // `secret` itself is at `@sanoma-ai/workflows/resources`, for data files; this is the drivers' side.
31
34
  export { generateSecret, isSecret, memorySecrets, resolveSecrets, } from "./secret.js";
32
35
  export { draftBranch, defaultBranch, draftOf, remoteFor, resolveRevision, SOURCE_RESOLVE, } from "./source.js";
33
36
  export { RUNTIME_IMAGE, RUNTIME_PORT, runtimeImage, sourceKeyId, UNNAMED, wakeUrlOf } from "./host.js";
34
37
  export { cloneUrl, deriveHosts, hostFacts, hostRootFacts, DEPLOY_KEY_TITLE, DEPLOY_KEY_TYPE, GITHUB_APP, githubRepository, HOST_SIGNING_KEY, installedSanoma, originUrl, SOURCE_KEY, sourceRepository, wokenBy, } from "./host-derive.js";
35
38
  export { checkDatabase, databaseUrlSecret, storeDatabaseUrl, } from "./database.js";
39
+ export {} from "./sandbox-contract.js";
40
+ export { LOCAL_SANDBOX, localBackend } from "./local-sandbox.js";
36
41
  export { openInvite, sealInvite, sealLoginCode } from "./seal.js";
37
42
  export { postInvite, sanoma } from "./runtime-ops.js";
38
43
  export { sourceKeyPair, sshPublicKey } from "./ssh-key.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { SandboxBackend, SandboxCapabilities } from "./sandbox-contract.ts";
2
+ /** What the local backend can do: its boxes are this machine's directories, which `stop` leaves. */
3
+ export declare const LOCAL_SANDBOX: SandboxCapabilities;
4
+ /**
5
+ * The boxes under `dir`: the box `name` is the directory `<dir>/<name>`, its home, made on its
6
+ * first `open`, deleted by `discard`. This machine is its image and its size, so it takes neither.
7
+ * A command's environment is `env(home)` (default: this Node and this process's `PATH`, and
8
+ * `HOME`), never this process's, under the caller's `env`.
9
+ */
10
+ export declare const localBackend: (dir: string, env?: (home: string) => Record<string, string>) => SandboxBackend;
@@ -0,0 +1,130 @@
1
+ import { spawn } from "node:child_process";
2
+ import { chmod, mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, join, resolve } from "node:path";
4
+ import { Readable, Writable } from "node:stream";
5
+ // The local backend of the `Sandbox` contract: boxes on this machine, the app's for a coding agent
6
+ // on a laptop and the testing package's fake. A box is a directory, its home, kept across stops;
7
+ // its commands are child processes, each in a process group of its own; its ports are loopback's.
8
+ /** What the local backend can do: its boxes are this machine's directories, which `stop` leaves. */
9
+ export const LOCAL_SANDBOX = { snapshot: true, pause: false, port: true };
10
+ /**
11
+ * The boxes under `dir`: the box `name` is the directory `<dir>/<name>`, its home, made on its
12
+ * first `open`, deleted by `discard`. This machine is its image and its size, so it takes neither.
13
+ * A command's environment is `env(home)` (default: this Node and this process's `PATH`, and
14
+ * `HOME`), never this process's, under the caller's `env`.
15
+ */
16
+ export const localBackend = (dir, env = (home) => ({
17
+ PATH: [dirname(process.execPath), process.env.PATH || "/usr/bin:/bin"].join(":"),
18
+ HOME: home,
19
+ })) => ({
20
+ async open({ name }) {
21
+ const home = boxDir(dir, name);
22
+ await mkdir(home, { recursive: true });
23
+ return localBox(name, home, env(home));
24
+ },
25
+ discard: ({ name }) => rm(boxDir(dir, name), { recursive: true, force: true }),
26
+ });
27
+ function boxDir(dir, name) {
28
+ if (!name || name !== basename(name) || name.startsWith("."))
29
+ throw new Error(`${name} is no box's name`);
30
+ return join(dir, name);
31
+ }
32
+ /**
33
+ * The box at `home`, over `node:child_process` and `node:fs`: a command is `bash -c` in a process
34
+ * group of its own (killed whole by `kill`, and by `stop`), with `base` under the caller's `env`;
35
+ * a relative path or `cwd` is under `home`, any other this machine's.
36
+ */
37
+ function localBox(id, home, base) {
38
+ /** The process groups its commands lead, killed by `stop` whether or not their leader has exited. */
39
+ const groups = new Set();
40
+ const at = (path) => resolve(home, path);
41
+ return {
42
+ id,
43
+ async run(command, { cwd, env, stdin, signal } = {}) {
44
+ const child = spawn("bash", ["-c", command], {
45
+ cwd: at(cwd ?? "."),
46
+ env: { ...base, ...env },
47
+ stdio: "pipe",
48
+ // Its own process group, so a bridge and what it starts are killed together.
49
+ detached: true,
50
+ });
51
+ const group = child.pid;
52
+ if (group !== undefined)
53
+ groups.add(group);
54
+ child.stdin.on("error", () => { });
55
+ if (!stdin)
56
+ child.stdin.end();
57
+ let ended = false;
58
+ const exited = new Promise((done) => {
59
+ child.on("error", () => done({ exitCode: 127 }));
60
+ // Exited when it exits, not when its pipes close: what it left running may hold them. What
61
+ // it printed last still arrives, so the end waits a moment for that.
62
+ child.on("exit", (code) => {
63
+ ended = true;
64
+ // Forgotten once none of its group is left, so `stop` kills no group its pid leads later.
65
+ if (group !== undefined && !groupAlive(group))
66
+ groups.delete(group);
67
+ const end = () => done({ exitCode: code ?? 1 });
68
+ child.on("close", end);
69
+ setTimeout(end, PIPES_WAIT).unref();
70
+ });
71
+ });
72
+ const kill = (sig = "SIGKILL") => {
73
+ // Once it has ended, only while its group is left, so a reused pid is never hit.
74
+ if (group !== undefined && (!ended || groupAlive(group)))
75
+ killGroup(group, sig);
76
+ };
77
+ const onAbort = () => kill();
78
+ if (signal?.aborted)
79
+ onAbort();
80
+ signal?.addEventListener("abort", onAbort, { once: true });
81
+ void exited.then(() => signal?.removeEventListener("abort", onAbort));
82
+ return {
83
+ stdin: Writable.toWeb(child.stdin),
84
+ stdout: web(child.stdout),
85
+ stderr: web(child.stderr),
86
+ wait: () => exited,
87
+ kill,
88
+ };
89
+ },
90
+ // A Buffer is a Uint8Array: no copy.
91
+ read: (path) => readFile(at(path)).catch(() => null),
92
+ async write(path, bytes, { mode } = {}) {
93
+ await mkdir(dirname(at(path)), { recursive: true });
94
+ await writeFile(at(path), bytes);
95
+ if (mode !== undefined)
96
+ await chmod(at(path), mode);
97
+ },
98
+ /** A port on loopback. */
99
+ expose: async (port) => ({ url: `http://127.0.0.1:${port}` }),
100
+ /** Kills every command's process group: what a bridge started too. */
101
+ async stop() {
102
+ for (const group of groups)
103
+ killGroup(group);
104
+ groups.clear();
105
+ },
106
+ };
107
+ }
108
+ /** How long a command's last output may take to arrive after it exits, in ms. */
109
+ const PIPES_WAIT = 200;
110
+ const web = (stream) => Readable.toWeb(stream);
111
+ /** Whether any process of the group `group` is left. */
112
+ function groupAlive(group) {
113
+ try {
114
+ process.kill(-group, 0);
115
+ return true;
116
+ }
117
+ catch {
118
+ return false;
119
+ }
120
+ }
121
+ /** Kills the process group `group` (a `detached` child's pid). */
122
+ function killGroup(group, signal = "SIGKILL") {
123
+ try {
124
+ process.kill(-group, signal);
125
+ }
126
+ catch {
127
+ // Gone already.
128
+ }
129
+ }
130
+ //# sourceMappingURL=local-sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local-sandbox.js","sourceRoot":"","sources":["../src/local-sandbox.ts"],"names":[],"mappings":"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"}
package/dist/op.d.ts CHANGED
@@ -5,6 +5,7 @@ import type { ConnectionSnapshot } from "./connection.ts";
5
5
  import type { ProviderV4 } from "@ai-sdk/provider";
6
6
  import type { z } from "zod";
7
7
  import type { Fake } from "./fake.ts";
8
+ import type { SandboxBackend, SandboxContext } from "./sandbox-contract.ts";
8
9
  import type { Secrets } from "./secret.ts";
9
10
  import type { RemoteHalf } from "./source.ts";
10
11
  import type { Steps } from "./steps.ts";
@@ -230,8 +231,8 @@ export interface Driver {
230
231
  * to call: the config then names the connector alone, and never a driver, a fake, steps or a
231
232
  * login. Any may be missing: a workflow using an operation of a connector with no driver is
232
233
  * refused, a connector with no fake has none for sandbox runs, one with no login half signs no
233
- * visitor in, one with no model half gives the app no models, and one with no remote half hosts
234
- * no repository a change is reviewed on.
234
+ * visitor in, one with no model half gives the app no models, one with no remote half hosts
235
+ * no repository a change is reviewed on, and one with no sandbox half opens no box.
235
236
  */
236
237
  export interface ConnectorSetup {
237
238
  /** Auth methods available to named connections; login identity is separate. */
@@ -267,6 +268,12 @@ export interface ConnectorSetup {
267
268
  * resolved config (`ResolvedConfig.remotes`). It reads its credentials when called.
268
269
  */
269
270
  remote?: () => RemoteHalf;
271
+ /**
272
+ * Makes the connector's sandbox backend, which opens the boxes of the type that meets the
273
+ * `Sandbox` contract by name: by the app, when a coding agent's turn needs a box. It reads its
274
+ * credentials through `context.secrets`.
275
+ */
276
+ sandbox?: (context: SandboxContext) => SandboxBackend | Promise<SandboxBackend>;
270
277
  }
271
278
  /** What the app gives a connector's model half (`ConnectorSetup.model`): the secrets, as a login half reads them. */
272
279
  export type ModelContext = Pick<LoginContext, "secrets">;
package/dist/op.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"op.js","sourceRoot":"","sources":["../src/op.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"op.js","sourceRoot":"","sources":["../src/op.ts"],"names":[],"mappings":"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"}
package/dist/paths.d.ts CHANGED
@@ -43,5 +43,14 @@ export declare function appOfFile(file: string | undefined): string | undefined;
43
43
  export declare function appFolders(root: string): string[];
44
44
  /** Where a kind of file is under `root`: `<root>/<kind>`, then each app's `apps/<app>/<kind>`, whether or not they exist. */
45
45
  export declare const kindDirs: (root: string, kind: string) => string[];
46
+ /**
47
+ * The files whose declarations join the config's, as `sanoma` loads it and the Worker's bundle
48
+ * imports them: each workflow source under `workflows/` and each app's (a test or a declaration
49
+ * file aside), then each `resources/data.ts` there is.
50
+ */
51
+ export declare function declarationFiles(root: string): {
52
+ workflows: string[];
53
+ data: string[];
54
+ };
46
55
  /** Where a company's scenarios are, under its root and each app's folder. */
47
56
  export declare const SCENARIOS_DIR = "scenarios";