loopable-cli 0.1.0
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/.output/nitro.json +17 -0
- package/.output/public/apple-touch-icon.png +0 -0
- package/.output/public/assets/_connectorId-BWjYn5tm.js +1 -0
- package/.output/public/assets/_loopId-Ds4RkyEc.js +1 -0
- package/.output/public/assets/_taskId-BOzICXDf.js +1 -0
- package/.output/public/assets/alert-Bn9-Zm0l.js +1 -0
- package/.output/public/assets/arrow-left-BF9juV9T.js +1 -0
- package/.output/public/assets/arrow-right-CzqvnOY1.js +1 -0
- package/.output/public/assets/button-HCY6DCY-.js +1 -0
- package/.output/public/assets/connection-status-CYZB8kLy.js +1 -0
- package/.output/public/assets/connector-icon-BZ_MUJV_.js +1 -0
- package/.output/public/assets/connectors-BvzttfSu.js +1 -0
- package/.output/public/assets/connectors-DdJNwRN_.js +1 -0
- package/.output/public/assets/external-link-D46X-bXa.js +1 -0
- package/.output/public/assets/gaps-D-I6xiDc.js +1 -0
- package/.output/public/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/.output/public/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/.output/public/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/.output/public/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/.output/public/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/.output/public/assets/inbox-BUUu9xxE.js +1 -0
- package/.output/public/assets/index-ztzex0FN.js +10 -0
- package/.output/public/assets/loader-CcBl2u8m.js +1 -0
- package/.output/public/assets/loop-form-dB3CLcZb.js +1 -0
- package/.output/public/assets/loops-DRunQrxL.js +1 -0
- package/.output/public/assets/loops-oSdqMd29.js +1 -0
- package/.output/public/assets/manifests-DNMqf7Vi.js +7 -0
- package/.output/public/assets/new-uyFxVjuB.js +1 -0
- package/.output/public/assets/preload-helper-ORbuV86A.js +3 -0
- package/.output/public/assets/runners-DSU3r5Ww.js +1 -0
- package/.output/public/assets/setting-fields-ixkpdBb-.js +3 -0
- package/.output/public/assets/styles-DZL5V1o7.css +2 -0
- package/.output/public/assets/switch-d5ummmHY.js +1 -0
- package/.output/public/assets/task-list-BpOStt9v.js +1 -0
- package/.output/public/assets/tasks-B8MsKgic.js +1 -0
- package/.output/public/assets/trash-2-D6u6NpzO.js +1 -0
- package/.output/public/favicon.svg +9 -0
- package/.output/server/_chunks/ssr-renderer.mjs +26 -0
- package/.output/server/_connectorId-8nb5yOzG.mjs +421 -0
- package/.output/server/_libs/@base-ui/react+[...].mjs +12841 -0
- package/.output/server/_libs/@tanstack/react-router+[...].mjs +14349 -0
- package/.output/server/_libs/class-variance-authority+clsx.mjs +69 -0
- package/.output/server/_libs/dijkstrajs.mjs +118 -0
- package/.output/server/_libs/drizzle-orm.mjs +4349 -0
- package/.output/server/_libs/h3+rou3+srvx.mjs +1361 -0
- package/.output/server/_libs/lucide-react.mjs +911 -0
- package/.output/server/_libs/next-themes.mjs +53 -0
- package/.output/server/_libs/pngjs.mjs +1680 -0
- package/.output/server/_libs/qrcode.mjs +2583 -0
- package/.output/server/_libs/sonner.mjs +955 -0
- package/.output/server/_libs/tailwind-merge.mjs +3380 -0
- package/.output/server/_libs/tanstack__history.mjs +341 -0
- package/.output/server/_libs/ufo.mjs +64 -0
- package/.output/server/_loopId-BsUL1SeL.mjs +272 -0
- package/.output/server/_runtime.mjs +35 -0
- package/.output/server/_ssr/access-zIl15o8y.mjs +42 -0
- package/.output/server/_ssr/agents-Btql102J.mjs +657 -0
- package/.output/server/_ssr/agents-DAOZPgO2.mjs +76 -0
- package/.output/server/_ssr/alert-NEiOCTOl.mjs +37 -0
- package/.output/server/_ssr/callback-CUINvl7M.mjs +62 -0
- package/.output/server/_ssr/client-CKkOfh-s.mjs +335 -0
- package/.output/server/_ssr/connection-status-Bi5peUAk.mjs +31 -0
- package/.output/server/_ssr/connections-qnw2GVlP.mjs +2542 -0
- package/.output/server/_ssr/connector-icon-DZXQLLFo.mjs +37 -0
- package/.output/server/_ssr/connectors-BHNwuIMj.mjs +106 -0
- package/.output/server/_ssr/connectors-C28g0i4c.mjs +83 -0
- package/.output/server/_ssr/createServerRpc-DPDrnFdH.mjs +12 -0
- package/.output/server/_ssr/empty-plugin-adapters-BJ4m9L8g.mjs +5 -0
- package/.output/server/_ssr/gaps-RAFSXLZf.mjs +53 -0
- package/.output/server/_ssr/inbox-k5zHergU.mjs +35 -0
- package/.output/server/_ssr/loop-form-DlObSewZ.mjs +412 -0
- package/.output/server/_ssr/loops-APFcP0y6.mjs +311 -0
- package/.output/server/_ssr/loops-xt2Bn7_q.mjs +222 -0
- package/.output/server/_ssr/new-DfKyd2Wa.mjs +169 -0
- package/.output/server/_ssr/router-3WmpE5b_.mjs +1553 -0
- package/.output/server/_ssr/runners-By-mwc3F.mjs +32 -0
- package/.output/server/_ssr/runners-DI_NxpHC.mjs +116 -0
- package/.output/server/_ssr/runners-DtXs4Q8a.mjs +106 -0
- package/.output/server/_ssr/secrets-Hqti-niS.mjs +199 -0
- package/.output/server/_ssr/setting-fields-8vKFj4df.mjs +92 -0
- package/.output/server/_ssr/ssr.mjs +6605 -0
- package/.output/server/_ssr/start-Bdc2GJUI.mjs +51 -0
- package/.output/server/_ssr/switch-ReNglgH6.mjs +18 -0
- package/.output/server/_ssr/task-list-CUITIqkb.mjs +186 -0
- package/.output/server/_ssr/tasks-SAjNovX6.mjs +110 -0
- package/.output/server/_ssr/tasks-vcoodp_D.mjs +533 -0
- package/.output/server/_tanstack-start-manifest_v-C0cP5F0M.mjs +125 -0
- package/.output/server/_taskId-CXS3lod0.mjs +249 -0
- package/.output/server/index.mjs +541 -0
- package/README.md +81 -0
- package/dist/cli.mjs +165 -0
- package/dist/dispatcher.mjs +9871 -0
- package/dist/runner.mjs +657 -0
- package/drizzle/0000_cold_demogoblin.sql +29 -0
- package/drizzle/0001_fancy_blonde_phantom.sql +13 -0
- package/drizzle/0002_spooky_smiling_tiger.sql +16 -0
- package/drizzle/0003_small_golden_guardian.sql +25 -0
- package/drizzle/0004_wonderful_thunderbolts.sql +39 -0
- package/drizzle/0005_named_workflows.sql +7 -0
- package/drizzle/0006_signals.sql +18 -0
- package/drizzle/0007_review_comments.sql +1 -0
- package/drizzle/0008_held_signals.sql +1 -0
- package/drizzle/0009_work_item_ref.sql +58 -0
- package/drizzle/0010_signal_payload.sql +2 -0
- package/drizzle/0011_rule_poll_cursor.sql +1 -0
- package/drizzle/0012_loops.sql +63 -0
- package/drizzle/0013_loop_owns_action_and_prompt.sql +154 -0
- package/drizzle/0014_loop_poll_every.sql +4 -0
- package/drizzle/0015_machines.sql +10 -0
- package/drizzle/0016_task_machine.sql +1 -0
- package/drizzle/0017_loop_machine.sql +1 -0
- package/drizzle/0018_runners.sql +1 -0
- package/drizzle/0019_task_runner.sql +1 -0
- package/drizzle/0020_loop_runner.sql +1 -0
- package/drizzle/0021_drop_runner_kind.sql +1 -0
- package/drizzle/0022_drop_loop_runner.sql +1 -0
- package/drizzle/0023_shared_host.sql +6 -0
- package/drizzle/meta/0000_snapshot.json +206 -0
- package/drizzle/meta/0001_snapshot.json +284 -0
- package/drizzle/meta/0002_snapshot.json +390 -0
- package/drizzle/meta/0003_snapshot.json +566 -0
- package/drizzle/meta/0004_snapshot.json +633 -0
- package/drizzle/meta/0005_snapshot.json +626 -0
- package/drizzle/meta/0006_snapshot.json +752 -0
- package/drizzle/meta/0007_snapshot.json +759 -0
- package/drizzle/meta/0008_snapshot.json +766 -0
- package/drizzle/meta/0009_snapshot.json +752 -0
- package/drizzle/meta/0010_snapshot.json +766 -0
- package/drizzle/meta/0011_snapshot.json +773 -0
- package/drizzle/meta/0012_snapshot.json +773 -0
- package/drizzle/meta/0013_snapshot.json +817 -0
- package/drizzle/meta/_journal.json +174 -0
- package/package.json +88 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { U as require_jsx_runtime } from "../_libs/@base-ui/react+[...].mjs";
|
|
2
|
+
import { f as Link, p as useNavigate } from "../_libs/@tanstack/react-router+[...].mjs";
|
|
3
|
+
import { a as connectorManifest, n as allWorkflows, s as connectorWorkflow } from "./connections-qnw2GVlP.mjs";
|
|
4
|
+
import { B as ArrowLeft, z as ArrowRight } from "../_libs/lucide-react.mjs";
|
|
5
|
+
import { C as Button$1, I as Badge, L as Card, R as CardContent, a as Route$9 } from "./router-3WmpE5b_.mjs";
|
|
6
|
+
import { t as ConnectorIcon } from "./connector-icon-DZXQLLFo.mjs";
|
|
7
|
+
import { t as LoopForm } from "./loop-form-DlObSewZ.mjs";
|
|
8
|
+
//#region node_modules/.nitro/vite/services/ssr/assets/new-DfKyd2Wa.js
|
|
9
|
+
var import_jsx_runtime = require_jsx_runtime();
|
|
10
|
+
/**
|
|
11
|
+
* One of a connector's workflows, as a loop nobody has saved yet.
|
|
12
|
+
*
|
|
13
|
+
* Nothing here touches the database, which is the point: choosing a workflow
|
|
14
|
+
* used to create the loop, so a look around the page left a live loop behind,
|
|
15
|
+
* enabled and with none of its questions answered. Now choosing only fills a
|
|
16
|
+
* form in, and the loop begins at Save.
|
|
17
|
+
*
|
|
18
|
+
* Deliberately client-safe, so the form can be filled in without a round trip
|
|
19
|
+
* and without anything on the server having to remember a half-made loop.
|
|
20
|
+
*/
|
|
21
|
+
function draftForWorkflow(connectorId, workflowId) {
|
|
22
|
+
const workflow = connectorWorkflow(connectorId, workflowId);
|
|
23
|
+
if (!workflow) throw new Error(`Unknown workflow: ${workflowId}`);
|
|
24
|
+
return {
|
|
25
|
+
id: null,
|
|
26
|
+
name: workflow.name,
|
|
27
|
+
connectorId,
|
|
28
|
+
workflowId,
|
|
29
|
+
prompt: workflow.prompt,
|
|
30
|
+
guidance: null,
|
|
31
|
+
agentId: null,
|
|
32
|
+
settings: {},
|
|
33
|
+
actionConnectorId: workflow.actionConnectorId ?? connectorId,
|
|
34
|
+
actionId: workflow.actionId,
|
|
35
|
+
actionTarget: workflow.actionTarget ?? {},
|
|
36
|
+
pollEveryMs: workflow.pollEveryMs ?? null,
|
|
37
|
+
enabled: true
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
function NewLoopPage() {
|
|
41
|
+
const { connector, workflow } = Route$9.useSearch();
|
|
42
|
+
const chosen = connector && workflow && connectorWorkflow(connector, workflow) ? {
|
|
43
|
+
connector,
|
|
44
|
+
workflow
|
|
45
|
+
} : null;
|
|
46
|
+
return chosen ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ShapeLoop, {
|
|
47
|
+
connectorId: chosen.connector,
|
|
48
|
+
workflowId: chosen.workflow
|
|
49
|
+
}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ChooseWorkflow, {});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The second step, and the one that makes a loop.
|
|
53
|
+
*
|
|
54
|
+
* Nothing has been written down yet: the draft is worked out here from the
|
|
55
|
+
* workflow the URL names, and the loop begins when the form is saved. Picking
|
|
56
|
+
* a workflow used to create it, which meant a look around this page left a
|
|
57
|
+
* live loop behind, enabled and with none of its questions answered.
|
|
58
|
+
*/
|
|
59
|
+
function ShapeLoop({ connectorId, workflowId }) {
|
|
60
|
+
const workflow = connectorWorkflow(connectorId, workflowId);
|
|
61
|
+
const connector = connectorManifest(connectorId);
|
|
62
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
63
|
+
className: "flex flex-col gap-6",
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
|
|
66
|
+
to: "/loops/new",
|
|
67
|
+
className: "flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground",
|
|
68
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowLeft, { className: "size-4" }), "New loop"]
|
|
69
|
+
}),
|
|
70
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", {
|
|
71
|
+
className: "flex items-start gap-4",
|
|
72
|
+
children: [connector ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConnectorIcon, {
|
|
73
|
+
icon: connector.icon,
|
|
74
|
+
accent: connector.accent
|
|
75
|
+
}) : null, /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
|
|
76
|
+
className: "text-2xl font-semibold tracking-tight",
|
|
77
|
+
children: workflow.name
|
|
78
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
|
|
79
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
80
|
+
children: ["Nothing is watched for until you add this. ", workflow.summary]
|
|
81
|
+
})] })]
|
|
82
|
+
}),
|
|
83
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(LoopForm, { loop: draftForWorkflow(connectorId, workflowId) })
|
|
84
|
+
]
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* There is no blank loop to write any more. Every loop is one of the
|
|
89
|
+
* workflows a connector offers, already knowing its own job, so choosing is
|
|
90
|
+
* the first half of making one and the settings are the second.
|
|
91
|
+
*/
|
|
92
|
+
function ChooseWorkflow() {
|
|
93
|
+
const { loops } = Route$9.useLoaderData();
|
|
94
|
+
const navigate = useNavigate();
|
|
95
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
96
|
+
className: "flex flex-col gap-6",
|
|
97
|
+
children: [
|
|
98
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Link, {
|
|
99
|
+
to: "/loops",
|
|
100
|
+
className: "flex items-center gap-1.5 text-sm text-muted-foreground hover:text-foreground",
|
|
101
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowLeft, { className: "size-4" }), "Loops"]
|
|
102
|
+
}),
|
|
103
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("header", { children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", {
|
|
104
|
+
className: "text-2xl font-semibold tracking-tight",
|
|
105
|
+
children: "New loop"
|
|
106
|
+
}), /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
107
|
+
className: "mt-1 text-sm text-muted-foreground",
|
|
108
|
+
children: "Pick what you want done. You can narrow it down to certain repositories, and add anything particular to your team, on the next screen."
|
|
109
|
+
})] }),
|
|
110
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {
|
|
111
|
+
className: "flex flex-col gap-3",
|
|
112
|
+
children: allWorkflows().map(({ connector, workflow }) => {
|
|
113
|
+
const existing = loops.filter((loop) => loop.workflowId === workflow.id).length;
|
|
114
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Card, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(CardContent, {
|
|
115
|
+
className: "flex items-start gap-4 pt-6",
|
|
116
|
+
children: [
|
|
117
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ConnectorIcon, {
|
|
118
|
+
icon: connector.icon,
|
|
119
|
+
accent: connector.accent
|
|
120
|
+
}),
|
|
121
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
122
|
+
className: "flex min-w-0 flex-1 flex-col gap-1",
|
|
123
|
+
children: [
|
|
124
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", {
|
|
125
|
+
className: "flex flex-wrap items-center gap-2",
|
|
126
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
127
|
+
className: "font-medium",
|
|
128
|
+
children: workflow.name
|
|
129
|
+
}), existing > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Badge, {
|
|
130
|
+
variant: "secondary",
|
|
131
|
+
children: existing === 1 ? "Already have one" : `Already have ${existing}`
|
|
132
|
+
}) : null]
|
|
133
|
+
}),
|
|
134
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", {
|
|
135
|
+
className: "text-sm text-muted-foreground",
|
|
136
|
+
children: workflow.summary
|
|
137
|
+
}),
|
|
138
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", {
|
|
139
|
+
className: "mt-1 flex items-start gap-1.5 text-xs text-muted-foreground",
|
|
140
|
+
children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowRight, { className: "mt-0.5 size-3.5 shrink-0" }), /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
141
|
+
"When ",
|
|
142
|
+
workflow.trigger,
|
|
143
|
+
", it writes ",
|
|
144
|
+
workflow.writes,
|
|
145
|
+
"."
|
|
146
|
+
] })]
|
|
147
|
+
})
|
|
148
|
+
]
|
|
149
|
+
}),
|
|
150
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Button$1, {
|
|
151
|
+
variant: "outline",
|
|
152
|
+
onClick: () => void navigate({
|
|
153
|
+
to: "/loops/new",
|
|
154
|
+
search: {
|
|
155
|
+
connector: connector.id,
|
|
156
|
+
workflow: workflow.id
|
|
157
|
+
}
|
|
158
|
+
}),
|
|
159
|
+
children: "Set up"
|
|
160
|
+
})
|
|
161
|
+
]
|
|
162
|
+
}) }, workflow.id);
|
|
163
|
+
})
|
|
164
|
+
})
|
|
165
|
+
]
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
//#endregion
|
|
169
|
+
export { NewLoopPage as component };
|