openwork-server 0.18.57 → 0.18.58

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 (82) hide show
  1. package/dist/opencode-plugin-deps-1.18.30.tgz +0 -0
  2. package/dist/opencode-plugins/opencode-stop-fence-client.js +6 -0
  3. package/dist/opencode-plugins/openwork-cloud-skills-v2.js +114 -0
  4. package/dist/opencode-plugins/openwork-codemode-discovery-v2.js +60 -0
  5. package/dist/opencode-plugins/openwork-context-v2.js +13777 -1
  6. package/dist/opencode-plugins/openwork-extensions-preview-steering.js +1 -1
  7. package/dist/opencode-plugins/openwork-extensions-preview.js +35 -4
  8. package/dist/opencode-plugins/openwork-mcp-readiness-v2.js +192 -0
  9. package/dist/opencode-plugins/openwork-mcp-results-v2.js +10836 -13
  10. package/dist/opencode-plugins/openwork-provider-filters-v2.js +5 -7
  11. package/dist/openwork-server.mjs +2781 -1805
  12. package/package.json +1 -1
  13. package/web/assets/{abnfDiagram-VCTEODGH-Dv8KxM1F.js → abnfDiagram-VCTEODGH-NpzjfSVw.js} +1 -1
  14. package/web/assets/{app-E_RdTPah.js → app-DAPWjSQy.js} +437 -409
  15. package/web/assets/app-Dt3ByUuG.css +32 -0
  16. package/web/assets/{arc-_WbfJV_K.js → arc-CHKYZ_eM.js} +1 -1
  17. package/web/assets/{architectureDiagram-5GKGNRK7-CckpRlSR.js → architectureDiagram-5GKGNRK7-CbtqO0tI.js} +1 -1
  18. package/web/assets/{artifact-code-view-BbU019Q_.js → artifact-code-view-BQF6eKZY.js} +1 -1
  19. package/web/assets/{artifact-spreadsheet-editor-B3q9ZZoB.js → artifact-spreadsheet-editor-CQJKFbub.js} +1 -1
  20. package/web/assets/{artifact-text-editor-CA2Dgulr.js → artifact-text-editor-B6E8-x3q.js} +1 -1
  21. package/web/assets/{blockDiagram-OSKFZWR5-BKdntEom.js → blockDiagram-OSKFZWR5-Ceoouvgp.js} +1 -1
  22. package/web/assets/{c4Diagram-7LVT6UL2-BJLyhqO1.js → c4Diagram-7LVT6UL2-DeZ6n4qW.js} +1 -1
  23. package/web/assets/channel-BA95BnJ8.js +1 -0
  24. package/web/assets/{chunk-2Q5K7J3B-D88ZIDGU.js → chunk-2Q5K7J3B-CpycWP6o.js} +1 -1
  25. package/web/assets/{chunk-5VM5RSS4-DebGr6SE.js → chunk-5VM5RSS4-DhEpcp77.js} +1 -1
  26. package/web/assets/{chunk-F27PBJKO-ChkVnT1d.js → chunk-F27PBJKO-D0H-x4y2.js} +1 -1
  27. package/web/assets/{chunk-HLEWEB6X-ER6ZF6Pd.js → chunk-HLEWEB6X-CApTHm_u.js} +1 -1
  28. package/web/assets/{chunk-JWPE2WC7-CQw0tJnK.js → chunk-JWPE2WC7-BHCjUPpx.js} +1 -1
  29. package/web/assets/{chunk-POPQ4Y6H-Dm94DEFc.js → chunk-POPQ4Y6H-CQhggViX.js} +1 -1
  30. package/web/assets/{chunk-SVP7TREG-rzCKlvNW.js → chunk-SVP7TREG-CpeIJurV.js} +1 -1
  31. package/web/assets/{chunk-XXDRQBXY-BcXExR9z.js → chunk-XXDRQBXY-CLRkKkAV.js} +1 -1
  32. package/web/assets/{chunk-ZLD2IHE6-CRtSpyr1.js → chunk-ZLD2IHE6-BdYnQ042.js} +1 -1
  33. package/web/assets/classDiagram-CYGNFDIV-DEYczDTV.js +1 -0
  34. package/web/assets/classDiagram-v2-TLXNO2FR-DEYczDTV.js +1 -0
  35. package/web/assets/{cose-bilkent-JH36ORCC-1inJ0kKP.js → cose-bilkent-JH36ORCC-DmF8vX7k.js} +1 -1
  36. package/web/assets/{cynefin-OW5HDTMX-BAEIfHgW.js → cynefin-OW5HDTMX-NLetkEsX.js} +1 -1
  37. package/web/assets/{cynefinDiagram-5FMLGOSQ-Dw_qVKID.js → cynefinDiagram-5FMLGOSQ-DKP1VgT5.js} +1 -1
  38. package/web/assets/{dagre-OS7QT2EB-BXAAz87u.js → dagre-OS7QT2EB-CRAAAd8s.js} +1 -1
  39. package/web/assets/{diagram-S7CK7UJ4-BQt6gteN.js → diagram-S7CK7UJ4-DpAtNlvk.js} +1 -1
  40. package/web/assets/{diagram-UQ7AKVKN-Dh7vrHwF.js → diagram-UQ7AKVKN-D3OPArp4.js} +1 -1
  41. package/web/assets/{diagram-VSXAHHWV-D2kNxmUp.js → diagram-VSXAHHWV-Ce3MQsSX.js} +1 -1
  42. package/web/assets/{diagram-VX7I27RA-CctQDix_.js → diagram-VX7I27RA-DMNK9KDH.js} +1 -1
  43. package/web/assets/{diagram-Z3DM3KII-CDGlIVG5.js → diagram-Z3DM3KII-CCUXCTwV.js} +1 -1
  44. package/web/assets/{ebnfDiagram-PWID7BFC-0bgAb7z3.js → ebnfDiagram-PWID7BFC-Ch1ZBqfh.js} +1 -1
  45. package/web/assets/{erDiagram-2YWLMYGG-Dbur-iWa.js → erDiagram-2YWLMYGG-DfRCB-xW.js} +1 -1
  46. package/web/assets/{flowDiagram-T62WH6J4-Cw6AeymU.js → flowDiagram-T62WH6J4-Ch9kGwk1.js} +1 -1
  47. package/web/assets/{ganttDiagram-EL5Y4UJY-BXYwFWOW.js → ganttDiagram-EL5Y4UJY-BzB0WGSq.js} +1 -1
  48. package/web/assets/{gitGraphDiagram-WWUBYQGX-De6ZCLNz.js → gitGraphDiagram-WWUBYQGX-Brbs3apz.js} +1 -1
  49. package/web/assets/{infoDiagram-FKFFQAWI-B11KM4en.js → infoDiagram-FKFFQAWI-Ca71MEwH.js} +1 -1
  50. package/web/assets/{ishikawaDiagram-5VMMS53U-kGPWhBux.js → ishikawaDiagram-5VMMS53U-D0wX8tOf.js} +1 -1
  51. package/web/assets/{journeyDiagram-EYS64GPL-K8Wtegvp.js → journeyDiagram-EYS64GPL-PeZPacru.js} +1 -1
  52. package/web/assets/{kanban-definition-UXKFOSKX-CjtX_cLJ.js → kanban-definition-UXKFOSKX-BLh162tT.js} +1 -1
  53. package/web/assets/{layout-Cn0uoRC-.js → layout-C0RknDsU.js} +1 -1
  54. package/web/assets/{linear-WTNza7Ko.js → linear-B9CiaY59.js} +1 -1
  55. package/web/assets/{mermaid.core-CbBVVRTZ.js → mermaid.core-CPTixcx8.js} +6 -6
  56. package/web/assets/{mindmap-definition-THT77NOG-DjyO1aA-.js → mindmap-definition-THT77NOG-BKk-svp_.js} +1 -1
  57. package/web/assets/{pegDiagram-XKGWAZYB-ChPXU87n.js → pegDiagram-XKGWAZYB-Bs6f-6OM.js} +1 -1
  58. package/web/assets/{pieDiagram-E7YTZNPT-bPQtXz_p.js → pieDiagram-E7YTZNPT-O9rjTBOJ.js} +1 -1
  59. package/web/assets/{quadrantDiagram-AXDQQJYC-DokQ5FGV.js → quadrantDiagram-AXDQQJYC-MPWJAd0o.js} +1 -1
  60. package/web/assets/{railroadDiagram-O6MQD6OU-CcdqGxuL.js → railroadDiagram-O6MQD6OU-CmtyQoYY.js} +1 -1
  61. package/web/assets/{requirementDiagram-IS5BZ75X-CGMF9hMZ.js → requirementDiagram-IS5BZ75X-CiLZ0RyK.js} +1 -1
  62. package/web/assets/{sankeyDiagram-P5KCCOFB-fc-d15bH.js → sankeyDiagram-P5KCCOFB-BLbDh3R4.js} +1 -1
  63. package/web/assets/{sequenceDiagram-WJ2MYXX4-DAmsOR8u.js → sequenceDiagram-WJ2MYXX4-DQMbAIgI.js} +1 -1
  64. package/web/assets/{sizeCapture-INFHLROL-6o7CY1B-.js → sizeCapture-INFHLROL-Di7AzhHC.js} +1 -1
  65. package/web/assets/{stateDiagram-XQSTLZYL-En5t4mkI.js → stateDiagram-XQSTLZYL-VqhUG217.js} +1 -1
  66. package/web/assets/stateDiagram-v2-IH3M54BS-BXsiZKn6.js +1 -0
  67. package/web/assets/{swimlanes-V6O3JKXN-COBv2NoI.js → swimlanes-V6O3JKXN-BkN28nKF.js} +1 -1
  68. package/web/assets/swimlanesDiagram-JKAHXJPX-BuF8_99Y.js +8 -0
  69. package/web/assets/{timeline-definition-24CTP7MA-Qb-aTtSE.js → timeline-definition-24CTP7MA-B-p3ba39.js} +1 -1
  70. package/web/assets/{vennDiagram-4TSXK5OY-Br3-0Ze-.js → vennDiagram-4TSXK5OY-Cggk7sJ0.js} +1 -1
  71. package/web/assets/{wardleyDiagram-VM6X3IG4-BCeY3AKL.js → wardleyDiagram-VM6X3IG4-DZ8iGx_0.js} +1 -1
  72. package/web/assets/{workspace-file-tree-CYzKM8q4.js → workspace-file-tree-BKLzftpj.js} +1 -1
  73. package/web/assets/{xychartDiagram-S5SC5T6Z-Bz96OPKc.js → xychartDiagram-S5SC5T6Z-Dg1J2qoX.js} +1 -1
  74. package/web/ext-microsoft-365.svg +1 -0
  75. package/web/index.html +2 -2
  76. package/web/assets/app-B682snBU.css +0 -32
  77. package/web/assets/channel-BZvy6aHa.js +0 -1
  78. package/web/assets/classDiagram-CYGNFDIV-DBAMzIwS.js +0 -1
  79. package/web/assets/classDiagram-v2-TLXNO2FR-DBAMzIwS.js +0 -1
  80. package/web/assets/katex-HP8lGamR.js +0 -257
  81. package/web/assets/stateDiagram-v2-IH3M54BS-DvIXHm_9.js +0 -1
  82. package/web/assets/swimlanesDiagram-JKAHXJPX-CorMSufQ.js +0 -8
@@ -0,0 +1,6 @@
1
+ /** The installed V1 extension checks its owned session before model dispatch. */
2
+ export async function assertSessionContinuation(post, input) {
3
+ if (!input.directory)
4
+ return;
5
+ await post("/experimental/session-stop-fence/check", input, AbortSignal.timeout(15_000));
6
+ }
@@ -0,0 +1,114 @@
1
+ import { z } from "zod";
2
+ const catalogSchema = z.object({
3
+ skills: z.array(z.object({
4
+ name: z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(64),
5
+ title: z.string().optional(),
6
+ description: z.string(),
7
+ capability: z.string().regex(/^(?:skill:[^:]+|plugin:[^:]+:[^:]+)$/),
8
+ modelDiscovery: z.boolean().optional(),
9
+ })),
10
+ });
11
+ /** Only discovery metadata is registered. Never cache a Cloud skill body or
12
+ * authorization decision: even an old model snapshot must retrieve the body
13
+ * from Den, which rechecks member access on every get_skill call. */
14
+ export function discoverySkills(value) {
15
+ const catalog = catalogSchema.parse(value);
16
+ let remaining = 24_000;
17
+ const result = [];
18
+ for (const skill of catalog.skills.filter(skill => skill.modelDiscovery === true).sort((a, b) => a.name.localeCompare(b.name))) {
19
+ if (result.length === 150)
20
+ break;
21
+ const name = (skill.title || skill.name).replace(/\s+/g, " ").trim().slice(0, 128);
22
+ const description = (skill.description || name).replace(/\s+/g, " ").trim().slice(0, 200);
23
+ const cost = skill.name.length + name.length + description.length;
24
+ if (cost > remaining)
25
+ break;
26
+ remaining -= cost;
27
+ result.push({
28
+ id: `openwork-cloud-${skill.name}`,
29
+ name,
30
+ description,
31
+ // Not SKILL.md: the native skill tool must not scan a fake directory.
32
+ // The pinned v2 beta uses location (newer upstream versions use path).
33
+ location: `/openwork/remote-skills/${skill.name}.md`,
34
+ content: [
35
+ "This is discovery metadata, NOT the skill's instructions or proof of access.",
36
+ `Retrieve the current full skill through OpenWork Connect get_skill with ${JSON.stringify({ name: skill.capability })}.`,
37
+ "Use get_skill directly when exposed, or through execute with its exact Code Mode catalog path. Only search inside execute if get_skill is not already listed; do not guess a tool name.",
38
+ "Read the returned SKILL.md before doing the task. Do not substitute these metadata for the instructions.",
39
+ "If the fetch is denied, unavailable, or the skill was removed, do not use it. Explain the failure; never recover its body from files or previous context.",
40
+ ].join("\n"),
41
+ });
42
+ }
43
+ return result;
44
+ }
45
+ /** Setup only starts background discovery, not a network dependency. Do not
46
+ * touch the native registry until opted-in metadata arrives: the off path must
47
+ * leave local skill discovery alone, including its cold initialization.
48
+ * No storage, configuration rewrite, watcher, or admission hook is involved. */
49
+ export async function registerCloudSkillDiscovery(context) {
50
+ let skills = [];
51
+ let fingerprint = "[]";
52
+ let closed = false;
53
+ let refreshing = false;
54
+ const controller = new AbortController();
55
+ let registration;
56
+ const refresh = async () => {
57
+ if (closed || refreshing)
58
+ return;
59
+ refreshing = true;
60
+ try {
61
+ const response = await fetch(context.options.url, {
62
+ method: "POST", redirect: "error",
63
+ signal: AbortSignal.any([controller.signal, AbortSignal.timeout(10_000)]),
64
+ headers: { Authorization: `Bearer ${context.options.token}`, "Content-Type": "application/json" },
65
+ body: JSON.stringify({ name: "openwork_skills", input: {} }),
66
+ });
67
+ if (!response.ok)
68
+ return;
69
+ const next = discoverySkills(await response.json());
70
+ const key = JSON.stringify(next);
71
+ if (closed || key === fingerprint)
72
+ return;
73
+ skills = next;
74
+ if (skills.length === 0) {
75
+ const current = registration;
76
+ registration = undefined;
77
+ await current?.dispose();
78
+ }
79
+ else if (!registration) {
80
+ const current = await context.skill.transform(editor => {
81
+ for (const skill of skills)
82
+ if (!editor.get(skill.id))
83
+ editor.add(skill);
84
+ });
85
+ if (closed) {
86
+ await current.dispose();
87
+ return;
88
+ }
89
+ registration = current;
90
+ }
91
+ else {
92
+ await context.skill.reload();
93
+ }
94
+ fingerprint = key;
95
+ }
96
+ catch {
97
+ // Cloud readiness is never a prerequisite to chatting. No body or access
98
+ // grant is cached, so keeping old discovery hints cannot bypass Den.
99
+ }
100
+ finally {
101
+ refreshing = false;
102
+ }
103
+ };
104
+ const timer = setInterval(() => void refresh(), 30_000);
105
+ timer.unref();
106
+ void refresh();
107
+ return async () => {
108
+ closed = true;
109
+ clearInterval(timer);
110
+ controller.abort();
111
+ skills = [];
112
+ await registration?.dispose();
113
+ };
114
+ }
@@ -0,0 +1,60 @@
1
+ import { tsPlugin } from "@sveltejs/acorn-typescript";
2
+ import { Parser } from "acorn";
3
+ // The engine transpiles scripts as TypeScript, so annotated scripts must parse here too.
4
+ const ScriptParser = Parser.extend(tsPlugin());
5
+ function record(value) {
6
+ return value !== null && typeof value === "object" && !Array.isArray(value);
7
+ }
8
+ function bindsDiscovery(value) {
9
+ if (!record(value))
10
+ return false;
11
+ if (value.type === "Identifier")
12
+ return value.name === "tools" || value.name === "search";
13
+ if (value.type === "Property")
14
+ return bindsDiscovery(value.value);
15
+ if (value.type === "AssignmentPattern")
16
+ return bindsDiscovery(value.left);
17
+ return Object.values(value).some(entry => Array.isArray(entry) ? entry.some(bindsDiscovery) : bindsDiscovery(entry));
18
+ }
19
+ /** The pinned engine has a bare search() intrinsic, but no tools.search alias.
20
+ * Rewrite syntax before execution, never retry a script that may have written.
21
+ * Source ranges leave strings, comments, and unrelated tool paths unchanged. */
22
+ export function nativeDiscoveryCode(code) {
23
+ if (!code.includes("search"))
24
+ return code;
25
+ let tree;
26
+ try {
27
+ tree = ScriptParser.parse(code, { ecmaVersion: "latest", locations: true, allowAwaitOutsideFunction: true, allowReturnOutsideFunction: true });
28
+ }
29
+ catch {
30
+ // Let the engine own syntax diagnostics.
31
+ return code;
32
+ }
33
+ const ranges = [];
34
+ let shadowed = false;
35
+ function visit(value) {
36
+ if (!record(value))
37
+ return;
38
+ if ((value.type === "VariableDeclarator" || value.type === "FunctionDeclaration" || value.type === "FunctionExpression" || value.type === "ClassDeclaration" || value.type === "ClassExpression") && bindsDiscovery(value.id)
39
+ || value.type === "CatchClause" && bindsDiscovery(value.param)
40
+ || Array.isArray(value.params) && value.params.some(bindsDiscovery))
41
+ shadowed = true;
42
+ if (value.type === "MemberExpression" && record(value.object) && value.object.type === "Identifier" && value.object.name === "tools"
43
+ && record(value.property) && (value.computed === true ? value.property.type === "Literal" && value.property.value === "search"
44
+ : value.property.type === "Identifier" && value.property.name === "search")
45
+ && typeof value.start === "number" && typeof value.end === "number")
46
+ ranges.push({ start: value.start, end: value.end });
47
+ for (const entry of Object.values(value)) {
48
+ if (Array.isArray(entry))
49
+ entry.forEach(visit);
50
+ else
51
+ visit(entry);
52
+ }
53
+ }
54
+ visit(tree);
55
+ if (shadowed)
56
+ return code;
57
+ for (const { start, end } of ranges.sort((left, right) => right.start - left.start))
58
+ code = code.slice(0, start) + "search" + code.slice(end);
59
+ return code;
60
+ }