dorkos 0.26.0 → 0.28.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.
@@ -1 +1 @@
1
- import{r as b,j as e,T as f,C as v,P as N,a as E,c as g,b as k,S,u as w,d as y,e as C,f as T,g as R,h as z,t as m}from"./index-GYKzCHRN.js";import{E as M,i as _,k as H,l as B}from"./index-GYKzCHRN.js";const P=new Set(["disabled","discovered","incompatible","invalid"]);function I({extension:o,onToggle:u,isToggling:c}){const{manifest:s,status:t,scope:h,error:n}=o,[r,a]=b.useState(!1),x=!P.has(t),d=t==="incompatible",l=t==="invalid",i=t==="compile_error"||t==="activate_error",j=!d&&!l;return e.jsx("div",{"data-slot":"extension-card","data-testid":`extension-card-${o.id}`,className:g("bg-card rounded-xl border p-4",i&&"border-amber-500/50",(d||l)&&"opacity-70"),children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0 flex-1 space-y-1.5",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i&&e.jsx(f,{className:"size-4 shrink-0 text-amber-500","aria-hidden":"true"}),(d||l)&&!i&&e.jsx(v,{className:"text-muted-foreground size-4 shrink-0","aria-hidden":"true"}),!i&&!d&&!l&&e.jsx(N,{className:"text-muted-foreground size-4 shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"font-medium",children:s.name}),e.jsxs("span",{className:"text-muted-foreground text-sm",children:["v",s.version]})]}),s.description&&e.jsx("p",{className:"text-muted-foreground text-sm",children:s.description}),d&&s.minHostVersion&&e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Requires DorkOS >= ",s.minHostVersion]}),i&&n&&e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:[t==="compile_error"?"Compilation error: ":"Activation failed: ",n.message]}),n.details&&e.jsxs("button",{type:"button",onClick:()=>a(p=>!p),className:"text-muted-foreground hover:text-foreground flex items-center gap-1 text-xs transition-colors","aria-expanded":r,children:[e.jsx(E,{className:g("size-3 transition-transform",r&&"rotate-180")}),r?"Hide details":"Show details"]}),r&&n.details&&e.jsx("pre",{className:"bg-muted mt-1 max-h-32 overflow-auto rounded-md p-2 text-xs",children:n.details})]}),e.jsxs("div",{className:"text-muted-foreground flex flex-wrap items-center gap-2 text-xs",children:[e.jsx(k,{variant:"outline",className:"text-xs",children:h}),s.author&&e.jsx("span",{children:s.author})]})]}),e.jsx("div",{className:"pt-0.5",children:e.jsx(S,{checked:x,onCheckedChange:p=>u(o.id,p),disabled:!j||c,"aria-label":`${x?"Disable":"Enable"} ${s.name}`})})]})})}function A(){const{data:o=[],isLoading:u}=w(),c=y(),s=C(),t=T(),h=new Set([...c.variables?[c.variables]:[],...s.variables?[s.variables]:[]]);async function n(a,x){(x?c:s).mutate(a,{onSuccess:()=>{m.info("Extension changed — reload the page to apply",{action:{label:"Reload now",onClick:()=>location.reload()}})},onError:l=>{const i=x?"enable":"disable";m.error(`Failed to ${i} extension: ${l.message}`)}})}function r(){t.mutate(void 0,{onSuccess:a=>{m.success(`Reloaded ${a.length} extension(s)`)},onError:()=>{m.error("Failed to reload extensions")}})}return u?e.jsx("div",{className:"text-muted-foreground py-8 text-center text-sm",children:"Loading extensions…"}):e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Extensions add new UI and capabilities to DorkOS. Place them in"," ",e.jsx("code",{className:"bg-muted rounded px-1",children:"~/.dork/extensions/"})," or"," ",e.jsx("code",{className:"bg-muted rounded px-1",children:".dork/extensions/"})," in your project."]}),o.length===0?e.jsx("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"no-extensions",children:e.jsx("p",{children:"No extensions installed."})}):e.jsx("div",{className:"space-y-3",children:o.map(a=>e.jsx(I,{extension:a,onToggle:n,isToggling:h.has(a.id)},a.id))}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(R,{variant:"outline",size:"sm",onClick:r,disabled:t.isPending,"data-testid":"reload-extensions-button",children:[e.jsx(z,{className:g("mr-2 size-4",t.isPending&&"animate-spin")}),"Reload Extensions"]})})]})}export{M as ExtensionLoader,_ as ExtensionProvider,A as ExtensionsSettingsTab,H as createExtensionAPI,B as useExtensions};
1
+ import{r as b,j as e,T as f,C as v,P as N,a as E,c as g,b as k,S,u as w,d as y,e as C,f as T,g as R,h as z,t as m}from"./index-CdnIpAgi.js";import{E as M,i as _,k as H,l as B}from"./index-CdnIpAgi.js";const P=new Set(["disabled","discovered","incompatible","invalid"]);function I({extension:o,onToggle:u,isToggling:c}){const{manifest:s,status:t,scope:h,error:n}=o,[r,a]=b.useState(!1),x=!P.has(t),d=t==="incompatible",l=t==="invalid",i=t==="compile_error"||t==="activate_error",j=!d&&!l;return e.jsx("div",{"data-slot":"extension-card","data-testid":`extension-card-${o.id}`,className:g("bg-card rounded-xl border p-4",i&&"border-amber-500/50",(d||l)&&"opacity-70"),children:e.jsxs("div",{className:"flex items-start justify-between gap-4",children:[e.jsxs("div",{className:"min-w-0 flex-1 space-y-1.5",children:[e.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[i&&e.jsx(f,{className:"size-4 shrink-0 text-amber-500","aria-hidden":"true"}),(d||l)&&!i&&e.jsx(v,{className:"text-muted-foreground size-4 shrink-0","aria-hidden":"true"}),!i&&!d&&!l&&e.jsx(N,{className:"text-muted-foreground size-4 shrink-0","aria-hidden":"true"}),e.jsx("span",{className:"font-medium",children:s.name}),e.jsxs("span",{className:"text-muted-foreground text-sm",children:["v",s.version]})]}),s.description&&e.jsx("p",{className:"text-muted-foreground text-sm",children:s.description}),d&&s.minHostVersion&&e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Requires DorkOS >= ",s.minHostVersion]}),i&&n&&e.jsxs("div",{className:"space-y-1",children:[e.jsxs("p",{className:"text-sm text-amber-600 dark:text-amber-400",children:[t==="compile_error"?"Compilation error: ":"Activation failed: ",n.message]}),n.details&&e.jsxs("button",{type:"button",onClick:()=>a(p=>!p),className:"text-muted-foreground hover:text-foreground flex items-center gap-1 text-xs transition-colors","aria-expanded":r,children:[e.jsx(E,{className:g("size-3 transition-transform",r&&"rotate-180")}),r?"Hide details":"Show details"]}),r&&n.details&&e.jsx("pre",{className:"bg-muted mt-1 max-h-32 overflow-auto rounded-md p-2 text-xs",children:n.details})]}),e.jsxs("div",{className:"text-muted-foreground flex flex-wrap items-center gap-2 text-xs",children:[e.jsx(k,{variant:"outline",className:"text-xs",children:h}),s.author&&e.jsx("span",{children:s.author})]})]}),e.jsx("div",{className:"pt-0.5",children:e.jsx(S,{checked:x,onCheckedChange:p=>u(o.id,p),disabled:!j||c,"aria-label":`${x?"Disable":"Enable"} ${s.name}`})})]})})}function A(){const{data:o=[],isLoading:u}=w(),c=y(),s=C(),t=T(),h=new Set([...c.variables?[c.variables]:[],...s.variables?[s.variables]:[]]);async function n(a,x){(x?c:s).mutate(a,{onSuccess:()=>{m.info("Extension changed — reload the page to apply",{action:{label:"Reload now",onClick:()=>location.reload()}})},onError:l=>{const i=x?"enable":"disable";m.error(`Failed to ${i} extension: ${l.message}`)}})}function r(){t.mutate(void 0,{onSuccess:a=>{m.success(`Reloaded ${a.length} extension(s)`)},onError:()=>{m.error("Failed to reload extensions")}})}return u?e.jsx("div",{className:"text-muted-foreground py-8 text-center text-sm",children:"Loading extensions…"}):e.jsxs("div",{className:"space-y-4",children:[e.jsxs("p",{className:"text-muted-foreground text-sm",children:["Extensions add new UI and capabilities to DorkOS. Place them in"," ",e.jsx("code",{className:"bg-muted rounded px-1",children:"~/.dork/extensions/"})," or"," ",e.jsx("code",{className:"bg-muted rounded px-1",children:".dork/extensions/"})," in your project."]}),o.length===0?e.jsx("div",{className:"text-muted-foreground py-8 text-center text-sm","data-testid":"no-extensions",children:e.jsx("p",{children:"No extensions installed."})}):e.jsx("div",{className:"space-y-3",children:o.map(a=>e.jsx(I,{extension:a,onToggle:n,isToggling:h.has(a.id)},a.id))}),e.jsx("div",{className:"flex justify-end",children:e.jsxs(R,{variant:"outline",size:"sm",onClick:r,disabled:t.isPending,"data-testid":"reload-extensions-button",children:[e.jsx(z,{className:g("mr-2 size-4",t.isPending&&"animate-spin")}),"Reload Extensions"]})})]})}export{M as ExtensionLoader,_ as ExtensionProvider,A as ExtensionsSettingsTab,H as createExtensionAPI,B as useExtensions};
@@ -15,8 +15,8 @@
15
15
  if (dark) document.documentElement.classList.add('dark');
16
16
  })();
17
17
  </script>
18
- <script type="module" crossorigin src="/assets/index-GYKzCHRN.js"></script>
19
- <link rel="stylesheet" crossorigin href="/assets/index-Bv8dGtOW.css">
18
+ <script type="module" crossorigin src="/assets/index-CdnIpAgi.js"></script>
19
+ <link rel="stylesheet" crossorigin href="/assets/index-BwRA7wsa.css">
20
20
  </head>
21
21
  <body>
22
22
  <div id="root"></div>
@@ -0,0 +1,20 @@
1
+ CREATE TABLE `activity_events` (
2
+ `id` text PRIMARY KEY NOT NULL,
3
+ `occurred_at` text NOT NULL,
4
+ `actor_type` text NOT NULL,
5
+ `actor_id` text,
6
+ `actor_label` text NOT NULL,
7
+ `category` text NOT NULL,
8
+ `event_type` text NOT NULL,
9
+ `resource_type` text,
10
+ `resource_id` text,
11
+ `resource_label` text,
12
+ `summary` text NOT NULL,
13
+ `link_path` text,
14
+ `metadata` text,
15
+ `created_at` text NOT NULL
16
+ );
17
+ --> statement-breakpoint
18
+ CREATE INDEX `idx_activity_occurred_at` ON `activity_events` (`occurred_at`);--> statement-breakpoint
19
+ CREATE INDEX `idx_activity_category` ON `activity_events` (`category`);--> statement-breakpoint
20
+ CREATE INDEX `idx_activity_actor_type` ON `activity_events` (`actor_type`);
@@ -0,0 +1,37 @@
1
+ -- Make pulse_schedules.cron nullable (tasks can be on-demand without a schedule)
2
+ -- Must drop pulse_runs first since it has FK to pulse_schedules
3
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
4
+ DROP TABLE IF EXISTS `pulse_runs`;--> statement-breakpoint
5
+ CREATE TABLE `__new_pulse_schedules` (
6
+ `id` text PRIMARY KEY NOT NULL,
7
+ `name` text NOT NULL,
8
+ `description` text,
9
+ `cron` text,
10
+ `timezone` text DEFAULT 'UTC' NOT NULL,
11
+ `prompt` text NOT NULL,
12
+ `cwd` text,
13
+ `agent_id` text,
14
+ `enabled` integer DEFAULT true NOT NULL,
15
+ `max_runtime` integer,
16
+ `permission_mode` text DEFAULT 'acceptEdits' NOT NULL,
17
+ `status` text DEFAULT 'active' NOT NULL,
18
+ `created_at` text NOT NULL,
19
+ `updated_at` text NOT NULL
20
+ );--> statement-breakpoint
21
+ INSERT INTO `__new_pulse_schedules`("id", "name", "description", "cron", "timezone", "prompt", "cwd", "agent_id", "enabled", "max_runtime", "permission_mode", "status", "created_at", "updated_at") SELECT "id", "name", "description", "cron", "timezone", "prompt", "cwd", "agent_id", "enabled", "max_runtime", "permission_mode", "status", "created_at", "updated_at" FROM `pulse_schedules`;--> statement-breakpoint
22
+ DROP TABLE `pulse_schedules`;--> statement-breakpoint
23
+ ALTER TABLE `__new_pulse_schedules` RENAME TO `pulse_schedules`;--> statement-breakpoint
24
+ CREATE TABLE `pulse_runs` (
25
+ `id` text PRIMARY KEY NOT NULL,
26
+ `schedule_id` text NOT NULL REFERENCES `pulse_schedules`(`id`),
27
+ `status` text NOT NULL,
28
+ `started_at` text NOT NULL,
29
+ `finished_at` text,
30
+ `duration_ms` integer,
31
+ `output` text,
32
+ `error` text,
33
+ `session_id` text,
34
+ `trigger` text DEFAULT 'scheduled' NOT NULL,
35
+ `created_at` text NOT NULL
36
+ );--> statement-breakpoint
37
+ PRAGMA foreign_keys=ON;
@@ -0,0 +1,28 @@
1
+ -- Tasks System Redesign: add file_path and tags_json to pulse_schedules, add is_system to agents.
2
+ -- Alpha project — drop existing schedules and runs (no backfill needed).
3
+ PRAGMA foreign_keys=OFF;--> statement-breakpoint
4
+ DELETE FROM `pulse_runs`;--> statement-breakpoint
5
+ DELETE FROM `pulse_schedules`;--> statement-breakpoint
6
+ CREATE TABLE `__new_pulse_schedules` (
7
+ `id` text PRIMARY KEY NOT NULL,
8
+ `name` text NOT NULL,
9
+ `description` text,
10
+ `cron` text NOT NULL,
11
+ `timezone` text DEFAULT 'UTC' NOT NULL,
12
+ `prompt` text NOT NULL,
13
+ `cwd` text,
14
+ `agent_id` text,
15
+ `enabled` integer DEFAULT true NOT NULL,
16
+ `max_runtime` integer,
17
+ `permission_mode` text DEFAULT 'acceptEdits' NOT NULL,
18
+ `status` text DEFAULT 'active' NOT NULL,
19
+ `file_path` text NOT NULL,
20
+ `tags_json` text DEFAULT '[]' NOT NULL,
21
+ `created_at` text NOT NULL,
22
+ `updated_at` text NOT NULL
23
+ );
24
+ --> statement-breakpoint
25
+ DROP TABLE `pulse_schedules`;--> statement-breakpoint
26
+ ALTER TABLE `__new_pulse_schedules` RENAME TO `pulse_schedules`;--> statement-breakpoint
27
+ PRAGMA foreign_keys=ON;--> statement-breakpoint
28
+ ALTER TABLE `agents` ADD `is_system` integer DEFAULT false NOT NULL;