@impractical-ai/motion 0.1.18 → 0.1.19

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.
@@ -17,8 +17,8 @@ import {
17
17
  waitForJobs,
18
18
  withAdmissionReceipt,
19
19
  withMeteredCall
20
- } from "./chunk-FTSZCIMV.js";
21
- import "./chunk-2GCSX3YN.js";
20
+ } from "./chunk-5VN5GZWK.js";
21
+ import "./chunk-XPFY56XH.js";
22
22
  import "./chunk-77HVPD4G.js";
23
23
  export {
24
24
  AGENT_HEADER,
@@ -4,7 +4,7 @@ import {
4
4
  fetchWorkspaces,
5
5
  grantScope,
6
6
  workspaceLabel
7
- } from "./chunk-XWCSIM4L.js";
7
+ } from "./chunk-ZJSSF74D.js";
8
8
  import {
9
9
  ApiError,
10
10
  delay,
@@ -12,14 +12,14 @@ import {
12
12
  loadConfig,
13
13
  recoverCorruptConfig,
14
14
  saveConfig
15
- } from "./chunk-FTSZCIMV.js";
15
+ } from "./chunk-5VN5GZWK.js";
16
16
  import {
17
17
  PACKAGE_COMMAND,
18
18
  PACKAGE_NAME,
19
19
  PACKAGE_VERSION,
20
20
  PRODUCTION_APP_URL,
21
21
  PRODUCTION_SUPABASE_URL
22
- } from "./chunk-2GCSX3YN.js";
22
+ } from "./chunk-XPFY56XH.js";
23
23
 
24
24
  // src/onboarding.ts
25
25
  import {
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  PRODUCTION_APP_URL,
4
4
  PRODUCTION_SUPABASE_URL
5
- } from "./chunk-2GCSX3YN.js";
5
+ } from "./chunk-XPFY56XH.js";
6
6
 
7
7
  // src/config.ts
8
8
  import {
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-QQ6NYC74.js";
5
5
  import {
6
6
  invoke
7
- } from "./chunk-FTSZCIMV.js";
7
+ } from "./chunk-5VN5GZWK.js";
8
8
 
9
9
  // src/mcp/template-source.ts
10
10
  import { mkdirSync, writeFileSync } from "node:fs";
@@ -36,6 +36,7 @@ ${source.files[p]}`).join("\n\n")
36
36
  };
37
37
  }
38
38
  };
39
+ var TEMPLATE_PAGE = 25;
39
40
  function rankTemplates(items, query) {
40
41
  const films = items.filter((item) => item.kind === "film");
41
42
  const words = query.toLowerCase().split(/[^a-z0-9]+/).filter((word) => word.length > 1);
@@ -50,25 +51,37 @@ function rankTemplates(items, query) {
50
51
  var templateSearchTool = {
51
52
  name: "template_search",
52
53
  title: "Find a template",
53
- description: 'Search the Impractical template library (the Studio\u2019s templates: complete films, many of them replicas of real launch films such as Notion Mail, Attio or Framer) by name or words, and get each match\u2019s slug. Use it when someone mentions a template, a film in the library, or "the X one", then read the one they mean with template_source. Leave the query empty to list them all.',
54
+ description: 'Search the Impractical template library (the Studio\u2019s templates: complete films, many of them replicas of real launch films such as Notion Mail, Attio or Framer) by name or words, and get each match\u2019s slug. Use it when someone mentions a template, a film in the library, or "the X one", then read the one they mean with template_source. Leave the query empty to list them all. Results come a page at a time: when there are more, the reply says so and gives the `after` to pass for the next page.',
54
55
  inputSchema: {
55
- query: external_exports.string().max(200).optional().describe('Words from the template\u2019s name or what it shows, e.g. "notion mail" or "attio sequences".')
56
+ query: external_exports.string().max(200).optional().describe('Words from the template\u2019s name or what it shows, e.g. "notion mail" or "attio sequences".'),
57
+ after: external_exports.number().int().min(0).optional().describe("How many results to skip: the `after` a previous reply gave, for its next page.")
56
58
  },
57
59
  // read-only library browsing: admitted (unmetered) as the library's other lookups are
58
60
  admitAs: "atelier_study",
59
61
  handler: async (args, ctx) => {
60
62
  const { items } = await ctx.invoke("atelier-library", { action: "catalog" });
61
63
  const query = String(args.query ?? "");
62
- const found = rankTemplates(items ?? [], query).slice(0, 25);
63
- if (!found.length) {
64
+ const all = rankTemplates(items ?? [], query);
65
+ if (!all.length) {
64
66
  return { text: `No template matches "${query}". Call template_search with no query to see them all.` };
65
67
  }
68
+ const after = Math.min(Math.max(0, Number(args.after ?? 0) || 0), all.length);
69
+ const found = all.slice(after, after + TEMPLATE_PAGE);
70
+ if (!found.length) {
71
+ return { text: `That's past the last of the ${all.length} template(s)${query ? ` for "${query}"` : ""}. Call template_search without \`after\` to start over.` };
72
+ }
66
73
  const lines = found.map(
67
74
  (item) => `- ${item.slug}: ${item.title}${item.durationSeconds ? ` (${Math.round(item.durationSeconds)}s)` : ""}` + (item.description ? ` \u2014 ${item.description.slice(0, 200)}` : "")
68
75
  );
76
+ const next = after + found.length;
77
+ const more = next < all.length ? `
78
+
79
+ Showing ${after + 1}\u2013${next} of ${all.length}. ${all.length - next} more: template_search({ ${query ? `query: ${JSON.stringify(query)}, ` : ""}after: ${next} }).` : after > 0 ? `
80
+
81
+ Showing ${after + 1}\u2013${next} of ${all.length}, the last page.` : "";
69
82
  return {
70
- text: `${found.length} template(s)${query ? ` for "${query}"` : ""}, best match first:
71
- ${lines.join("\n")}
83
+ text: `${all.length} template(s)${query ? ` for "${query}"` : ""}, best match first:
84
+ ${lines.join("\n")}${more}
72
85
 
73
86
  Read the one meant with template_source({ slug }).`
74
87
  };
@@ -91,6 +104,7 @@ async function templateSourceCommand(slug, dir) {
91
104
 
92
105
  export {
93
106
  templateSourceTool,
107
+ TEMPLATE_PAGE,
94
108
  rankTemplates,
95
109
  templateSearchTool,
96
110
  templateSourceCommand
@@ -5,10 +5,10 @@ import {
5
5
  import {
6
6
  fetchWorkspaces,
7
7
  workspaceLabel
8
- } from "./chunk-XWCSIM4L.js";
8
+ } from "./chunk-ZJSSF74D.js";
9
9
  import {
10
10
  studioQuery
11
- } from "./chunk-FTSZCIMV.js";
11
+ } from "./chunk-5VN5GZWK.js";
12
12
  import {
13
13
  __commonJS,
14
14
  __toESM
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  templateSearchTool,
4
4
  templateSourceTool
5
- } from "./chunk-M6427SHW.js";
5
+ } from "./chunk-D3OOI7XP.js";
6
6
  import {
7
7
  ATELIER_FIRST_PASS_RULE,
8
8
  ATELIER_RULE,
@@ -52,7 +52,7 @@ import {
52
52
  upgradeTool,
53
53
  waitBudgetMs,
54
54
  workspaceNote
55
- } from "./chunk-JSEDAJHM.js";
55
+ } from "./chunk-MTNMG25I.js";
56
56
  import {
57
57
  $ZodObject,
58
58
  $ZodType,
@@ -88,13 +88,13 @@ import {
88
88
  } from "./chunk-QQ6NYC74.js";
89
89
  import {
90
90
  openBrowser
91
- } from "./chunk-TETWFQPX.js";
91
+ } from "./chunk-4SKYR3FS.js";
92
92
  import {
93
93
  DEVICE_START_BODY,
94
94
  fetchWorkspaces,
95
95
  grantScope,
96
96
  workspaceLabel
97
- } from "./chunk-XWCSIM4L.js";
97
+ } from "./chunk-ZJSSF74D.js";
98
98
  import {
99
99
  ApiError,
100
100
  admitMcpCall,
@@ -106,13 +106,13 @@ import {
106
106
  setAgentName,
107
107
  validateApiResponse,
108
108
  withAdmissionReceipt
109
- } from "./chunk-FTSZCIMV.js";
109
+ } from "./chunk-5VN5GZWK.js";
110
110
  import {
111
111
  BUILD_COMMIT,
112
112
  PACKAGE_VERSION,
113
113
  PRODUCTION_APP_URL,
114
114
  PRODUCTION_SUPABASE_URL
115
- } from "./chunk-2GCSX3YN.js";
115
+ } from "./chunk-XPFY56XH.js";
116
116
  import {
117
117
  __commonJS,
118
118
  __toESM
@@ -3,7 +3,7 @@
3
3
  // package.json
4
4
  var package_default = {
5
5
  name: "@impractical-ai/motion",
6
- version: "0.1.18",
6
+ version: "0.1.19",
7
7
  private: false,
8
8
  description: "Create and refine Impractical Motion videos from coding agents and the terminal.",
9
9
  homepage: "https://github.com/Openpod/impractical-motion#readme",
@@ -57,7 +57,7 @@ var PRODUCTION_APP_URL = "https://motion.impractical.ai";
57
57
  var PRODUCTION_SUPABASE_URL = "https://uaxjweednprtbhbceify.supabase.co";
58
58
  var PACKAGE_NAME = "@impractical-ai/motion";
59
59
  var PACKAGE_VERSION = package_default.version;
60
- var BUILD_COMMIT = "440f47f" ? "440f47f" : "dev";
60
+ var BUILD_COMMIT = "77e5ecb" ? "77e5ecb" : "dev";
61
61
  var BUILD_ID = `${PACKAGE_VERSION}+${BUILD_COMMIT}`;
62
62
  var PACKAGE_COMMAND = `npx --yes ${PACKAGE_NAME}`;
63
63
 
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ApiContractError
4
- } from "./chunk-FTSZCIMV.js";
4
+ } from "./chunk-5VN5GZWK.js";
5
5
 
6
6
  // src/workspaces.ts
7
7
  var UNSUPPORTED = {
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  setup
4
- } from "./chunk-TETWFQPX.js";
5
- import "./chunk-XWCSIM4L.js";
4
+ } from "./chunk-4SKYR3FS.js";
5
+ import "./chunk-ZJSSF74D.js";
6
6
  import {
7
7
  invoke,
8
8
  invokeAt,
@@ -12,8 +12,8 @@ import {
12
12
  saveConfig,
13
13
  studioLink,
14
14
  waitForJobs
15
- } from "./chunk-FTSZCIMV.js";
16
- import "./chunk-2GCSX3YN.js";
15
+ } from "./chunk-5VN5GZWK.js";
16
+ import "./chunk-XPFY56XH.js";
17
17
  import "./chunk-77HVPD4G.js";
18
18
 
19
19
  // src/commands.ts
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  saveChecks
4
- } from "./chunk-JSEDAJHM.js";
4
+ } from "./chunk-MTNMG25I.js";
5
5
  import "./chunk-QQ6NYC74.js";
6
- import "./chunk-XWCSIM4L.js";
6
+ import "./chunk-ZJSSF74D.js";
7
7
  import {
8
8
  invoke
9
- } from "./chunk-FTSZCIMV.js";
10
- import "./chunk-2GCSX3YN.js";
9
+ } from "./chunk-5VN5GZWK.js";
10
+ import "./chunk-XPFY56XH.js";
11
11
  import "./chunk-77HVPD4G.js";
12
12
 
13
13
  // src/mcp/draft-check.ts
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  buildServerInstructions
4
- } from "./chunk-ZEVR6SM6.js";
5
- import "./chunk-M6427SHW.js";
4
+ } from "./chunk-W4VH5SCR.js";
5
+ import "./chunk-D3OOI7XP.js";
6
6
  import {
7
7
  VIDEO_UI_GUIDE,
8
8
  applyLocalMotionLibraryOverride,
@@ -11,15 +11,15 @@ import {
11
11
  motionLabEnabled,
12
12
  phasedFlowEnabled,
13
13
  qualityLoopEnabled
14
- } from "./chunk-JSEDAJHM.js";
14
+ } from "./chunk-MTNMG25I.js";
15
15
  import "./chunk-QQ6NYC74.js";
16
- import "./chunk-TETWFQPX.js";
17
- import "./chunk-XWCSIM4L.js";
16
+ import "./chunk-4SKYR3FS.js";
17
+ import "./chunk-ZJSSF74D.js";
18
18
  import {
19
19
  invoke,
20
20
  withMeteredCall
21
- } from "./chunk-FTSZCIMV.js";
22
- import "./chunk-2GCSX3YN.js";
21
+ } from "./chunk-5VN5GZWK.js";
22
+ import "./chunk-XPFY56XH.js";
23
23
  import "./chunk-77HVPD4G.js";
24
24
 
25
25
  // src/mcp/guidance.ts
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  PACKAGE_VERSION
4
- } from "./chunk-2GCSX3YN.js";
4
+ } from "./chunk-XPFY56XH.js";
5
5
  import "./chunk-77HVPD4G.js";
6
6
 
7
7
  // src/cli-args.ts
@@ -111,17 +111,17 @@ async function runCli(args, deps) {
111
111
  return runStdioServer();
112
112
  }
113
113
  if (command === "template-source") {
114
- const { templateSourceCommand } = await import("./template-source-KKAKXOHX.js");
114
+ const { templateSourceCommand } = await import("./template-source-XWVFNS6W.js");
115
115
  deps.writeLine(await templateSourceCommand(rest[0], typeof flags.dir === "string" ? flags.dir : void 0));
116
116
  return;
117
117
  }
118
118
  if (command === "guidance") {
119
- const { guidanceCommand } = await import("./guidance-SMXXX463.js");
119
+ const { guidanceCommand } = await import("./guidance-LQX2JZWK.js");
120
120
  deps.writeLine(await guidanceCommand(typeof flags.dir === "string" ? flags.dir : void 0));
121
121
  return;
122
122
  }
123
123
  if (command === "draft-check") {
124
- const { draftCheck } = await import("./draft-check-BRVH77WB.js");
124
+ const { draftCheck } = await import("./draft-check-YWT3WVD3.js");
125
125
  const changed = Array.isArray(flags.changed) ? flags.changed : typeof flags.changed === "string" ? [flags.changed] : [];
126
126
  const report = await draftCheck(typeof flags.dir === "string" ? flags.dir : void 0, changed);
127
127
  if (report) deps.writeLine(report);
@@ -180,11 +180,11 @@ async function runCli(args, deps) {
180
180
  // src/index.ts
181
181
  runCli(process.argv.slice(2), {
182
182
  writeLine: (line) => console.log(line),
183
- loadCommands: () => import("./commands-Y723HSJI.js"),
184
- loadApi: () => import("./api-WSATRY3V.js"),
185
- loadMcp: () => import("./stdio-N2RZGMBI.js")
183
+ loadCommands: () => import("./commands-FSL4FNI4.js"),
184
+ loadApi: () => import("./api-LZ6H5LHP.js"),
185
+ loadMcp: () => import("./stdio-643H2TXL.js")
186
186
  }).catch(async (error) => {
187
- const { ApiError } = await import("./api-WSATRY3V.js");
187
+ const { ApiError } = await import("./api-LZ6H5LHP.js");
188
188
  if (error instanceof ApiError) {
189
189
  console.error(`Error (${error.status} from ${error.fn}): ${error.message}`);
190
190
  if (error.status === 429) console.error("Weekly MCP allowance reached. Upgrade or wait for Monday UTC.");
@@ -5,14 +5,14 @@ import {
5
5
  createProjectWorkspaceLookup,
6
6
  createServer,
7
7
  runStdioServer
8
- } from "./chunk-ZEVR6SM6.js";
9
- import "./chunk-M6427SHW.js";
10
- import "./chunk-JSEDAJHM.js";
8
+ } from "./chunk-W4VH5SCR.js";
9
+ import "./chunk-D3OOI7XP.js";
10
+ import "./chunk-MTNMG25I.js";
11
11
  import "./chunk-QQ6NYC74.js";
12
- import "./chunk-TETWFQPX.js";
13
- import "./chunk-XWCSIM4L.js";
14
- import "./chunk-FTSZCIMV.js";
15
- import "./chunk-2GCSX3YN.js";
12
+ import "./chunk-4SKYR3FS.js";
13
+ import "./chunk-ZJSSF74D.js";
14
+ import "./chunk-5VN5GZWK.js";
15
+ import "./chunk-XPFY56XH.js";
16
16
  import "./chunk-77HVPD4G.js";
17
17
  export {
18
18
  ENGINE_DTS_URI,
@@ -1,15 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
+ TEMPLATE_PAGE,
3
4
  rankTemplates,
4
5
  templateSearchTool,
5
6
  templateSourceCommand,
6
7
  templateSourceTool
7
- } from "./chunk-M6427SHW.js";
8
+ } from "./chunk-D3OOI7XP.js";
8
9
  import "./chunk-QQ6NYC74.js";
9
- import "./chunk-FTSZCIMV.js";
10
- import "./chunk-2GCSX3YN.js";
10
+ import "./chunk-5VN5GZWK.js";
11
+ import "./chunk-XPFY56XH.js";
11
12
  import "./chunk-77HVPD4G.js";
12
13
  export {
14
+ TEMPLATE_PAGE,
13
15
  rankTemplates,
14
16
  templateSearchTool,
15
17
  templateSourceCommand,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@impractical-ai/motion",
3
- "version": "0.1.18",
3
+ "version": "0.1.19",
4
4
  "private": false,
5
5
  "description": "Create and refine Impractical Motion videos from coding agents and the terminal.",
6
6
  "homepage": "https://github.com/Openpod/impractical-motion#readme",