runwork 0.10.4 → 0.12.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.
Files changed (35) hide show
  1. package/dist/agents/__tests__/claude-code-managed-block.test.d.ts +1 -0
  2. package/dist/agents/__tests__/claude-code-managed-block.test.js +97 -0
  3. package/dist/agents/__tests__/codex-minimum-permissions.test.d.ts +1 -0
  4. package/dist/agents/__tests__/codex-minimum-permissions.test.js +82 -0
  5. package/dist/agents/__tests__/cursor-merge.test.d.ts +1 -0
  6. package/dist/agents/__tests__/cursor-merge.test.js +66 -0
  7. package/dist/agents/__tests__/defaults-merge.test.d.ts +1 -0
  8. package/dist/agents/__tests__/defaults-merge.test.js +268 -0
  9. package/dist/agents/__tests__/intro-skill.test.js +32 -0
  10. package/dist/agents/claude-code.d.ts +5 -0
  11. package/dist/agents/claude-code.js +29 -0
  12. package/dist/agents/cursor.d.ts +23 -1
  13. package/dist/agents/cursor.js +42 -3
  14. package/dist/agents/default-config.d.ts +30 -0
  15. package/dist/agents/default-config.js +67 -0
  16. package/dist/agents/defaults-merge.d.ts +72 -0
  17. package/dist/agents/defaults-merge.js +131 -0
  18. package/dist/agents/intro-skill.d.ts +9 -0
  19. package/dist/agents/intro-skill.js +41 -0
  20. package/dist/agents/types.d.ts +31 -2
  21. package/dist/commands/__tests__/setup-persona.test.d.ts +1 -0
  22. package/dist/commands/__tests__/setup-persona.test.js +31 -0
  23. package/dist/commands/info.d.ts +1 -1
  24. package/dist/commands/info.js +7 -2
  25. package/dist/commands/setup.d.ts +7 -0
  26. package/dist/commands/setup.js +22 -0
  27. package/dist/commands/sync.js +147 -59
  28. package/dist/generated/bundled-types.js +33 -33
  29. package/dist/generated/version.d.ts +1 -1
  30. package/dist/generated/version.js +1 -1
  31. package/dist/types.d.ts +36 -0
  32. package/dist/ui/banner.js +1 -1
  33. package/dist/utils/app-info.d.ts +4 -0
  34. package/dist/utils/app-info.js +17 -0
  35. package/package.json +1 -1
@@ -1 +1 @@
1
- export declare const VERSION = "0.10.4";
1
+ export declare const VERSION = "0.12.0";
@@ -1,2 +1,2 @@
1
1
  // Auto-generated by scripts/embed-types.ts -- do not edit
2
- export const VERSION = "0.10.4";
2
+ export const VERSION = "0.12.0";
package/dist/types.d.ts CHANGED
@@ -23,6 +23,11 @@ export interface AppInfo {
23
23
  workspaceId: string;
24
24
  workspaceName: string;
25
25
  gitRemoteUrl: string;
26
+ /** Production deployment state. Present on getApp responses. */
27
+ production?: {
28
+ url: string | null;
29
+ deployed: boolean;
30
+ };
26
31
  }
27
32
  export interface WorkspaceInfo {
28
33
  id: string;
@@ -121,6 +126,25 @@ export interface McpServerConfig {
121
126
  lastConnectedAt?: number;
122
127
  toolCount?: number;
123
128
  }
129
+ /**
130
+ * Per-agent state tracking baked-in default permission rules that the CLI
131
+ * injects automatically during sync, with sticky opt-out semantics.
132
+ *
133
+ * lastInjected: what we wrote on the previous sync (used to detect when the
134
+ * user removed an entry from the agent's config file).
135
+ * userOptOuts: ever-accumulating set of entries the user has removed at least
136
+ * once. Never re-injected until the tool is removed entirely.
137
+ */
138
+ export interface AgentDefaultsState {
139
+ lastInjected: {
140
+ allow?: string[];
141
+ deny?: string[];
142
+ };
143
+ userOptOuts: {
144
+ allow?: string[];
145
+ deny?: string[];
146
+ };
147
+ }
124
148
  export interface SetupState {
125
149
  workspaceId: string;
126
150
  workspaceName: string;
@@ -147,6 +171,18 @@ export interface SetupState {
147
171
  * on every cycle while still catching newly-installed agents within a day.
148
172
  */
149
173
  lastDetectedAt?: string;
174
+ /** Schema version for agentDefaults; absence means bootstrap on next sync. */
175
+ agentDefaultsVersion?: number;
176
+ /** Per-agent slug => default rule state. Absence of an entry means bootstrap. */
177
+ agentDefaults?: Record<string, AgentDefaultsState>;
178
+ /**
179
+ * Technical-level classification from desktop onboarding. Used to inject
180
+ * persona-specific default instructions into integrated agents.
181
+ */
182
+ persona?: {
183
+ level: 1 | 2 | 3;
184
+ label: 'novice' | 'curious' | 'engineer';
185
+ };
150
186
  }
151
187
  export interface WorkflowInfo {
152
188
  name: string;
package/dist/ui/banner.js CHANGED
@@ -10,9 +10,9 @@ function prettyPath(dir) {
10
10
  return dir;
11
11
  }
12
12
  export const SUPPORTED_AGENTS = [
13
+ { id: 'codex', name: 'OpenAI Codex', command: 'cd {dir} && codex' },
13
14
  { id: 'claude-code', name: 'Claude Code', command: 'cd {dir} && claude' },
14
15
  { id: 'cursor', name: 'Cursor', command: 'cursor {dir}' },
15
- { id: 'codex', name: 'OpenAI Codex', command: 'cd {dir} && codex' },
16
16
  { id: 'claude-desktop', name: 'Claude Desktop', command: 'Open Claude Desktop and add {dir} as a project folder' },
17
17
  { id: 'antigravity', name: 'Antigravity', command: 'cd {dir} && antigravity' },
18
18
  ];
@@ -14,6 +14,10 @@ export interface AppInfoData {
14
14
  url: string | null;
15
15
  active: boolean;
16
16
  };
17
+ production: {
18
+ url: string | null;
19
+ deployed: boolean;
20
+ };
17
21
  dashboardUrl: string;
18
22
  gitRemoteUrl: string;
19
23
  registries: AppRegistries | null;
@@ -14,6 +14,16 @@ export async function fetchAppInfo(client, opts, serverData) {
14
14
  catch {
15
15
  // No active dev session
16
16
  }
17
+ let production = { url: null, deployed: false };
18
+ try {
19
+ const app = await client.getApp(opts.appId);
20
+ if (app.production) {
21
+ production = app.production;
22
+ }
23
+ }
24
+ catch {
25
+ // App lookup failed; leave production unset
26
+ }
17
27
  let registries = null;
18
28
  const data = serverData !== undefined ? serverData : await fetchServerData(client, opts.workspaceId);
19
29
  if (data) {
@@ -23,6 +33,7 @@ export async function fetchAppInfo(client, opts, serverData) {
23
33
  app: { id: opts.appId, name: opts.appName, slug: opts.appSlug },
24
34
  workspace: { id: opts.workspaceId, name: opts.workspaceName },
25
35
  preview,
36
+ production,
26
37
  dashboardUrl: `${opts.baseUrl}/chat/${opts.appId}`,
27
38
  gitRemoteUrl: client.getGitRemoteUrl(opts.workspaceId, opts.appId),
28
39
  registries,
@@ -82,6 +93,12 @@ export function printAppInfo(data) {
82
93
  else {
83
94
  console.log(` ${dim(pad('Preview:'))}${dim('(not running)')}`);
84
95
  }
96
+ if (data.production.url) {
97
+ console.log(` ${dim(pad('Production:'))}${green(data.production.url)} ${dim('(deployed)')}`);
98
+ }
99
+ else {
100
+ console.log(` ${dim(pad('Production:'))}${dim('(not deployed)')}`);
101
+ }
85
102
  const reg = data.registries;
86
103
  if (!reg) {
87
104
  console.log('');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runwork",
3
- "version": "0.10.4",
3
+ "version": "0.12.0",
4
4
  "description": "CLI for Runwork: develop, preview, and deploy Runwork apps from your local machine.",
5
5
  "license": "UNLICENSED",
6
6
  "author": "Runwork <info@runwork.ai> (https://www.runwork.ai)",