@burtson-labs/host-kit 0.4.64 → 0.4.65

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,11 +1,3 @@
1
- /**
2
- * `get_artifact` — fetch a published artifact you own from the cloud so the agent can
3
- * REVISE it. Returns the current content INLINE (straight from the API) — deliberately
4
- * does NOT write it to disk: Bandit's edit tools reject editing a pre-existing unread
5
- * file, which would force a redundant read_file and make it look like the content came
6
- * from the filesystem instead of the API. The model revises the returned content, writes
7
- * the new version to a fresh file, and calls update_artifact. Cloud-only.
8
- */
9
1
  import type { AgentTool } from '@burtson-labs/agent-core';
10
2
  export declare function buildGetArtifactTool(opts: {
11
3
  token: string;
@@ -1 +1 @@
1
- {"version":3,"file":"getArtifactTool.d.ts","sourceRoot":"","sources":["../../src/tools/getArtifactTool.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,SAAS,EAAc,MAAM,0BAA0B,CAAC;AAKtE,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,GAAG,SAAS,CAsCZ"}
1
+ {"version":3,"file":"getArtifactTool.d.ts","sourceRoot":"","sources":["../../src/tools/getArtifactTool.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAoC,MAAM,0BAA0B,CAAC;AAU5F,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B,GAAG,SAAS,CAwDZ"}
@@ -1,8 +1,56 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.buildGetArtifactTool = buildGetArtifactTool;
37
+ /**
38
+ * `get_artifact` — fetch a published artifact you own from the cloud so the agent can
39
+ * REVISE it. Returns the current content INLINE (straight from the API) — deliberately
40
+ * does NOT write it to disk: Bandit's edit tools reject editing a pre-existing unread
41
+ * file, which would force a redundant read_file and make it look like the content came
42
+ * from the filesystem instead of the API. The model revises the returned content, writes
43
+ * the new version to a fresh file, and calls update_artifact. Cloud-only.
44
+ */
45
+ const fs = __importStar(require("fs"));
46
+ const path = __importStar(require("path"));
4
47
  const artifacts_1 = require("../artifacts");
5
- const MAX_INLINE = 150000;
48
+ // Inline cap ~6K tokens. 1.7.440 inlined up to 150K chars, and that giant tool
49
+ // result made the NEXT model call look like a cold start (huge prefill; on
50
+ // Ollama-backed models a bigger context can even force a model reload) — the
51
+ // "warming up… didn't answer in 120s" failure. Most artifacts fit well under
52
+ // this; larger ones take the on-disk path below.
53
+ const MAX_INLINE = 24000;
6
54
  function buildGetArtifactTool(opts) {
7
55
  return {
8
56
  name: 'get_artifact',
@@ -13,7 +61,7 @@ function buildGetArtifactTool(opts) {
13
61
  parameters: [
14
62
  { name: 'url', description: 'The artifact URL (or key) to fetch. Must be one you own.', required: true }
15
63
  ],
16
- async execute(params) {
64
+ async execute(params, ctx) {
17
65
  const target = (params.url ?? '').trim();
18
66
  if (!target)
19
67
  return { output: 'Error: the `url` parameter is required (the artifact URL or key to fetch).', isError: true };
@@ -25,15 +73,32 @@ function buildGetArtifactTool(opts) {
25
73
  keyOrUrl: target,
26
74
  fetchImpl: opts.fetchImpl
27
75
  });
28
- const full = fetched.content.length <= MAX_INLINE;
29
- const shown = full ? fetched.content : fetched.content.slice(0, MAX_INLINE);
30
76
  const name = fetched.key.split('/').pop() || 'artifact';
77
+ if (fetched.content.length <= MAX_INLINE) {
78
+ // Common case: content comes back inline, straight from the API — revise
79
+ // from this result and write the new version to a fresh file.
80
+ return {
81
+ output: `Here is the CURRENT published content of the artifact (${fetched.contentType}, ${fetched.content.length} chars), ` +
82
+ `fetched from the API. To revise it: make your changes to this content, write the updated version to a new ` +
83
+ `file (e.g. "${name}"), then call update_artifact with url "${target}" and that file path — the link stays the same.\n\n` +
84
+ `--- current content ---\n${fetched.content}`
85
+ };
86
+ }
87
+ // Large artifact: inlining it would flood the model's context (slow prefill /
88
+ // context blowout reads as a fake "cold start"). Save it to disk and have the
89
+ // model work on the FILE with targeted reads/edits instead of a full rewrite.
90
+ const root = ctx.workspaceRoot ?? process.cwd();
91
+ const outDir = path.join(root, '.bandit', 'artifacts');
92
+ await fs.promises.mkdir(outDir, { recursive: true });
93
+ const outPath = path.join(outDir, name);
94
+ await fs.promises.writeFile(outPath, fetched.content, 'utf8');
95
+ const rel = path.relative(root, outPath);
31
96
  return {
32
- output: `Here is the CURRENT published content of the artifact (${fetched.contentType}, ${fetched.content.length} chars), ` +
33
- `fetched from the API${full ? '' : ` showing the first ${MAX_INLINE} chars`}. ` +
34
- `To revise it: make your changes to this content, write the updated version to a new file (e.g. "${name}"), ` +
35
- `then call update_artifact with url "${target}" and that file path — the link stays the same.\n\n` +
36
- `--- current content ---\n${shown}`
97
+ output: `This artifact is large (${fetched.contentType}, ${fetched.content.length} chars) — too big to inline. ` +
98
+ `Saved the CURRENT published content to "${rel}". Revise it with TARGETED edits: read_file it, apply ` +
99
+ `apply_edit/replace_range changes (do not rewrite the whole file), then call update_artifact with ` +
100
+ `url "${target}" and path "${rel}" — the link stays the same.\n\n` +
101
+ `--- first ${Math.min(2000, fetched.content.length)} chars for orientation ---\n${fetched.content.slice(0, 2000)}`
37
102
  };
38
103
  }
39
104
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"getArtifactTool.js","sourceRoot":"","sources":["../../src/tools/getArtifactTool.ts"],"names":[],"mappings":";;AAaA,oDA2CC;AA/CD,4CAA2C;AAE3C,MAAM,UAAU,GAAG,MAAO,CAAC;AAE3B,SAAgB,oBAAoB,CAAC,IAKpC;IACC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sGAAsG;YACtG,uGAAuG;YACvG,wGAAwG;YACxG,mEAAmE;QACrE,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0DAA0D,EAAE,QAAQ,EAAE,IAAI,EAAE;SACzG;QACD,KAAK,CAAC,OAAO,CAAC,MAA8B;YAC1C,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,MAAM,EAAE,4EAA4E,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC5H,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAW,EAAC;oBAChC,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,MAAM;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,CAAC;gBAClD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;gBAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC;gBACxD,OAAO;oBACL,MAAM,EACJ,0DAA0D,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,WAAW;wBACnH,uBAAuB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,wBAAwB,UAAU,QAAQ,IAAI;wBACjF,mGAAmG,IAAI,MAAM;wBAC7G,uCAAuC,MAAM,qDAAqD;wBAClG,4BAA4B,KAAK,EAAE;iBACtC,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACnH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"getArtifactTool.js","sourceRoot":"","sources":["../../src/tools/getArtifactTool.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA,oDA6DC;AAjFD;;;;;;;GAOG;AACH,uCAAyB;AACzB,2CAA6B;AAE7B,4CAA2C;AAE3C,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,iDAAiD;AACjD,MAAM,UAAU,GAAG,KAAM,CAAC;AAE1B,SAAgB,oBAAoB,CAAC,IAKpC;IACC,OAAO;QACL,IAAI,EAAE,cAAc;QACpB,WAAW,EACT,sGAAsG;YACtG,uGAAuG;YACvG,wGAAwG;YACxG,mEAAmE;QACrE,UAAU,EAAE;YACV,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,0DAA0D,EAAE,QAAQ,EAAE,IAAI,EAAE;SACzG;QACD,KAAK,CAAC,OAAO,CAAC,MAA8B,EAAE,GAAyB;YACrE,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,MAAM,EAAE,4EAA4E,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC5H,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAA,uBAAW,EAAC;oBAChC,YAAY,EAAE,IAAI,CAAC,YAAY;oBAC/B,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,QAAQ,EAAE,MAAM;oBAChB,SAAS,EAAE,IAAI,CAAC,SAAS;iBAC1B,CAAC,CAAC;gBACH,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,UAAU,CAAC;gBACxD,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;oBACzC,yEAAyE;oBACzE,8DAA8D;oBAC9D,OAAO;wBACL,MAAM,EACJ,0DAA0D,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,WAAW;4BACnH,4GAA4G;4BAC5G,eAAe,IAAI,2CAA2C,MAAM,qDAAqD;4BACzH,4BAA4B,OAAO,CAAC,OAAO,EAAE;qBAChD,CAAC;gBACJ,CAAC;gBACD,8EAA8E;gBAC9E,8EAA8E;gBAC9E,8EAA8E;gBAC9E,MAAM,IAAI,GAAI,GAAyD,CAAC,aAAa,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;gBACvG,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;gBACvD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAC9D,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;gBACzC,OAAO;oBACL,MAAM,EACJ,2BAA2B,OAAO,CAAC,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,MAAM,+BAA+B;wBACxG,2CAA2C,GAAG,wDAAwD;wBACtG,mGAAmG;wBACnG,QAAQ,MAAM,eAAe,GAAG,kCAAkC;wBAClE,aAAa,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,+BAA+B,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;iBACrH,CAAC;YACJ,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,EAAE,MAAM,EAAE,4BAA4B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACnH,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@burtson-labs/host-kit",
3
- "version": "0.4.64",
3
+ "version": "0.4.65",
4
4
  "author": {
5
5
  "name": "Burtson Labs",
6
6
  "email": "team@burtson.ai",
@@ -22,7 +22,7 @@
22
22
  "dist"
23
23
  ],
24
24
  "dependencies": {
25
- "@burtson-labs/agent-core": "1.6.81"
25
+ "@burtson-labs/agent-core": "1.6.82"
26
26
  },
27
27
  "devDependencies": {
28
28
  "@types/node": "^20.11.0",