@felan-ai/felan 0.1.0-alpha.3 → 0.2.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 (42) hide show
  1. package/NOTICE +1 -1
  2. package/README.md +69 -11
  3. package/dist/application.d.ts.map +1 -1
  4. package/dist/application.js +25 -2
  5. package/dist/application.js.map +1 -1
  6. package/dist/extensions.d.ts +13 -1
  7. package/dist/extensions.d.ts.map +1 -1
  8. package/dist/extensions.js +46 -5
  9. package/dist/extensions.js.map +1 -1
  10. package/dist/index.d.ts +9 -4
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +5 -3
  13. package/dist/index.js.map +1 -1
  14. package/dist/runtime.d.ts +13 -3
  15. package/dist/runtime.d.ts.map +1 -1
  16. package/dist/runtime.js +159 -124
  17. package/dist/runtime.js.map +1 -1
  18. package/dist/settings.d.ts +7 -0
  19. package/dist/settings.d.ts.map +1 -1
  20. package/dist/settings.js +15 -3
  21. package/dist/settings.js.map +1 -1
  22. package/dist/subagents/catalog.d.ts +8 -0
  23. package/dist/subagents/catalog.d.ts.map +1 -0
  24. package/dist/subagents/catalog.js +132 -0
  25. package/dist/subagents/catalog.js.map +1 -0
  26. package/dist/subagents/host.d.ts +86 -0
  27. package/dist/subagents/host.d.ts.map +1 -0
  28. package/dist/subagents/host.js +994 -0
  29. package/dist/subagents/host.js.map +1 -0
  30. package/dist/subagents/presenter.d.ts +11 -0
  31. package/dist/subagents/presenter.d.ts.map +1 -0
  32. package/dist/subagents/presenter.js +34 -0
  33. package/dist/subagents/presenter.js.map +1 -0
  34. package/dist/subagents/store.d.ts +17 -0
  35. package/dist/subagents/store.d.ts.map +1 -0
  36. package/dist/subagents/store.js +34 -0
  37. package/dist/subagents/store.js.map +1 -0
  38. package/dist/system-prompt.d.ts +4 -0
  39. package/dist/system-prompt.d.ts.map +1 -0
  40. package/dist/system-prompt.js +22 -0
  41. package/dist/system-prompt.js.map +1 -0
  42. package/package.json +8 -7
package/NOTICE CHANGED
@@ -6,6 +6,6 @@ This package composes the MIT-licensed @felan-ai/agent-core and Felan extension
6
6
  packages listed in package.json. Their package-level LICENSE and NOTICE files
7
7
  contain the applicable attribution and source provenance.
8
8
 
9
- The terminal application uses @earendil-works/pi-coding-agent 0.82.1 from
9
+ The terminal application uses @earendil-works/pi-coding-agent 0.83.0 from
10
10
  https://github.com/earendil-works/pi, licensed under the MIT License.
11
11
  Copyright (c) 2025 Mario Zechner.
package/README.md CHANGED
@@ -8,9 +8,16 @@ npx @felan-ai/felan
8
8
  ```
9
9
 
10
10
  The package exposes the `felan` binary. It stores model credentials, settings,
11
- and sessions under `~/.felan/agent` by default; set `FELAN_AGENT_DIR` to select
12
- another local directory. Use `/login` inside the TUI to configure provider-owned
13
- model credentials without a Felan account.
11
+ sessions, agents, and runtime state under `~/.felan` by default; set
12
+ `FELAN_AGENT_DIR` to select another directory. Use `/login` inside the TUI to
13
+ configure provider-owned model credentials without a Felan account. Felan reads
14
+ global settings from `~/.felan/settings.json` and does not load Pi project
15
+ settings. Pi project trust does not apply to Felan's fixed resource policy, so
16
+ Felan starts without a project trust prompt.
17
+
18
+ Felan suppresses Pi's version notification, bundled changelog, package update
19
+ notifications, and install/update telemetry. Update behavior is owned by the
20
+ Felan application.
14
21
 
15
22
  Each session uses a cwd-bound `HostAgentRuntime`. Pi's session runtime recreates
16
23
  the host runtime, filtered settings, resources, and session composition for
@@ -18,14 +25,65 @@ new, resume, fork, clone, and import flows, then rebinds the active interactive
18
25
  UI. Host mode uses the current user's filesystem and process permissions and is
19
26
  not an isolation boundary.
20
27
 
21
- Only the source-controlled Felan extension package list is imported. Ambient Pi
22
- packages, extensions, skills, prompts, themes, and context files remain filtered;
23
- inline Felan extensions can still provide shared tools, prompts, interaction,
24
- and subagent behavior. The default local list includes `@felan-ai/ext-powerline`
25
- for an ANSI-aware footer; it is a direct TUI dependency and is not part of any
26
- cloud composition. Agent Core's `spawn_agent` tool delegates child creation
27
- through the portable host contract; local children run as in-process Agent Core
28
- sessions on fresh host runtimes without Felan cloud services.
28
+ Only source-controlled built-in Felan extensions can be imported. External
29
+ packages, extensions, configured skill paths, prompts, themes, and Pi context
30
+ files remain filtered. Agent Skills are loaded from `~/.agents/skills` and
31
+ `<workspace>/.agents/skills` and are shared with local subagents.
32
+ The built-in powerline reads `~/.felan/powerline.json` (or
33
+ `$FELAN_AGENT_DIR/powerline.json`) once when it initializes.
34
+
35
+ All built-in extensions are enabled by default. Toggle them in
36
+ `~/.felan/settings.json`:
37
+
38
+ ```json
39
+ {
40
+ "builtinExtensions": {
41
+ "subagents": true,
42
+ "prewalk": true,
43
+ "context": true,
44
+ "powerline": false
45
+ }
46
+ }
47
+ ```
48
+
49
+ ## System prompt append
50
+
51
+ The TUI reads one optional `$FELAN_AGENT_DIR/APPEND_SYSTEM.md` file when each
52
+ session is constructed (`~/.felan/APPEND_SYSTEM.md` by default). Missing and
53
+ blank files add nothing; other read failures stop session construction with the
54
+ filesystem error. The file extends Agent Core's Felan prompt after enabled
55
+ extension capabilities. Child persona instructions follow this application
56
+ append. Explicit Agent Skills and the current working directory are added last.
57
+
58
+ System prompt inputs are limited to Agent Core, enabled capabilities, the
59
+ single application append above, explicit Agent Skills, and the current working
60
+ directory. Pi `SYSTEM.md`, project `APPEND_SYSTEM.md`, and project
61
+ prompt/context files stay outside local composition.
62
+
63
+ When enabled, `@felan-ai/ext-subagents` uses the session-bound local host and
64
+ provides `Agent`, `list_subagents`,
65
+ `get_subagent_result`, `steer_subagent`, and `cancel_subagent`. A root-scoped
66
+ local host tracks foreground and background runs, persists the latest child session
67
+ metadata, delivers completion notices, supports bounded nesting, and uses the
68
+ application's current workspace. The TUI status line shows active/recent child
69
+ state, and runtime shutdown awaits active-child cancellation before Pi teardown.
70
+ Completed-child continuation uses the same child ID and Pi session file while
71
+ replacing the latest result. The default list also
72
+ includes `@felan-ai/ext-powerline` for an ANSI-aware footer; it is a direct TUI
73
+ dependency and is not part of cloud composition.
74
+
75
+ Local agent definitions are loaded only from bundled Felan definitions,
76
+ `~/.felan/agents/*.md` (or `$FELAN_AGENT_DIR/agents/*.md`), and
77
+ `<workspace>/.felan/agents/*.md`, with
78
+ project definitions taking precedence. Pi ambient agent discovery remains
79
+ disabled. Local subagent concurrency defaults to four and depth defaults to
80
+ three; set `felanSubagents.concurrency` and `felanSubagents.maxDepth` in the
81
+ Felan settings file to configure those bounded values.
82
+
83
+ Local model selectors are deterministic and support explicit inheritance or an
84
+ exact authenticated `provider/model`; exact selectors never fall back. Requested
85
+ thinking levels are checked against that resolved model and unsupported levels
86
+ return `unsupported_thinking` instead of being silently clamped.
29
87
 
30
88
  ```sh
31
89
  felan --diagnostics
@@ -1 +1 @@
1
- {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,8BAA8B,EAAE,MAAM,cAAc,CAAC;AAE5F,MAAM,WAAW,oBAAqB,SAAQ,8BAA8B;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrF"}
1
+ {"version":3,"file":"application.d.ts","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,8BAA8B,EACpC,MAAM,cAAc,CAAC;AAGtB,MAAM,WAAW,oBAAqB,SAAQ,8BAA8B;IAC1E,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,wBAAsB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CrF"}
@@ -1,15 +1,26 @@
1
1
  import { InteractiveMode } from '@earendil-works/pi-coding-agent';
2
- import { createLocalFelanRuntime } from './runtime.js';
2
+ import { createLocalFelanRuntime, } from './runtime.js';
3
+ import { attachLocalSubagentPresenter } from './subagents/presenter.js';
3
4
  export async function runLocalFelan(options = {}) {
4
5
  const runtime = await createLocalFelanRuntime(options);
5
6
  const previousPiAgentDir = process.env.PI_CODING_AGENT_DIR;
7
+ const previousPiSkipVersionCheck = process.env.PI_SKIP_VERSION_CHECK;
8
+ const previousPiTelemetry = process.env.PI_TELEMETRY;
6
9
  process.env.PI_CODING_AGENT_DIR = runtime.services.agentDir;
10
+ process.env.PI_SKIP_VERSION_CHECK = '1';
11
+ process.env.PI_TELEMETRY = '0';
7
12
  try {
8
13
  const mode = new InteractiveMode(runtime, {
9
14
  ...(options.initialMessage === undefined ? {} : { initialMessage: options.initialMessage }),
10
15
  ...(options.verbose === undefined ? {} : { verbose: options.verbose }),
11
16
  });
12
- await mode.run();
17
+ const detachPresenter = attachLocalSubagentPresenter(runtime, mode);
18
+ try {
19
+ await mode.run();
20
+ }
21
+ finally {
22
+ detachPresenter();
23
+ }
13
24
  }
14
25
  finally {
15
26
  try {
@@ -22,6 +33,18 @@ export async function runLocalFelan(options = {}) {
22
33
  else {
23
34
  process.env.PI_CODING_AGENT_DIR = previousPiAgentDir;
24
35
  }
36
+ if (previousPiSkipVersionCheck === undefined) {
37
+ delete process.env.PI_SKIP_VERSION_CHECK;
38
+ }
39
+ else {
40
+ process.env.PI_SKIP_VERSION_CHECK = previousPiSkipVersionCheck;
41
+ }
42
+ if (previousPiTelemetry === undefined) {
43
+ delete process.env.PI_TELEMETRY;
44
+ }
45
+ else {
46
+ process.env.PI_TELEMETRY = previousPiTelemetry;
47
+ }
25
48
  }
26
49
  }
27
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,uBAAuB,EAAuC,MAAM,cAAc,CAAC;AAO5F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAE5D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE;YACxC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3F,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACvE,CAAC,CAAC;QACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"application.js","sourceRoot":"","sources":["../src/application.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EACL,uBAAuB,GAExB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,4BAA4B,EAAE,MAAM,0BAA0B,CAAC;AAOxE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;IAC3D,MAAM,0BAA0B,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACrE,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACrD,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,GAAG,CAAC;IACxC,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC;IAE/B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE;YACxC,GAAG,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC;YAC3F,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACvE,CAAC,CAAC;QACH,MAAM,eAAe,GAAG,4BAA4B,CAClD,OAAO,EACP,IAAqE,CACtE,CAAC;QACF,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC;QACnB,CAAC;gBAAS,CAAC;YACT,eAAe,EAAE,CAAC;QACpB,CAAC;IACH,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QAC1B,CAAC;gBAAS,CAAC;YACT,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;gBACrC,OAAO,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACzC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;YACvD,CAAC;YACD,IAAI,0BAA0B,KAAK,SAAS,EAAE,CAAC;gBAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,qBAAqB,GAAG,0BAA0B,CAAC;YACjE,CAAC;YACD,IAAI,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBACtC,OAAO,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,mBAAmB,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,4 +1,16 @@
1
1
  import type { ExtensionPackageImporter } from '@felan-ai/agent-core';
2
- export declare const localExtensionPackages: readonly ["@felan-ai/ext-prewalk", "@felan-ai/ext-context", "@felan-ai/ext-powerline"];
2
+ import { type SubagentHost } from '@felan-ai/ext-subagents';
3
+ export declare const subagentsExtensionPackage = "@felan-ai/ext-subagents";
4
+ export declare const builtinExtensionPackages: {
5
+ readonly subagents: "@felan-ai/ext-subagents";
6
+ readonly prewalk: "@felan-ai/ext-prewalk";
7
+ readonly context: "@felan-ai/ext-context";
8
+ readonly powerline: "@felan-ai/ext-powerline";
9
+ };
10
+ export declare const localExtensionPackages: ("@felan-ai/ext-subagents" | "@felan-ai/ext-prewalk" | "@felan-ai/ext-context" | "@felan-ai/ext-powerline")[];
11
+ export type BuiltinExtensionName = keyof typeof builtinExtensionPackages;
12
+ export type BuiltinExtensionSettings = Partial<Record<BuiltinExtensionName, boolean>>;
13
+ export declare function resolveBuiltinExtensionPackages(settings: unknown): readonly string[];
3
14
  export declare const importLocalExtension: ExtensionPackageImporter;
15
+ export declare function createLocalExtensionImporter(host: SubagentHost, importExtension?: ExtensionPackageImporter, shutdownHost?: () => Promise<void>): ExtensionPackageImporter;
4
16
  //# sourceMappingURL=extensions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAErE,eAAO,MAAM,sBAAsB,wFAIzB,CAAC;AAIX,eAAO,MAAM,oBAAoB,EAAE,wBAKlC,CAAC"}
1
+ {"version":3,"file":"extensions.d.ts","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AAEjC,eAAO,MAAM,yBAAyB,4BAA4B,CAAC;AACnE,eAAO,MAAM,wBAAwB;;;;;CAK3B,CAAC;AACX,eAAO,MAAM,sBAAsB,+GAA0C,CAAC;AAE9E,MAAM,MAAM,oBAAoB,GAAG,MAAM,OAAO,wBAAwB,CAAC;AACzE,MAAM,MAAM,wBAAwB,GAAG,OAAO,CAAC,MAAM,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC,CAAC;AAItF,wBAAgB,+BAA+B,CAAC,QAAQ,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAYpF;AAED,eAAO,MAAM,oBAAoB,EAAE,wBAKlC,CAAC;AAEF,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,YAAY,EAClB,eAAe,GAAE,wBAA+C,EAChE,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GACjC,wBAAwB,CAiB1B"}
@@ -1,13 +1,54 @@
1
- export const localExtensionPackages = [
2
- '@felan-ai/ext-prewalk',
3
- '@felan-ai/ext-context',
4
- '@felan-ai/ext-powerline',
5
- ];
1
+ import { createSubagentsExtension, } from '@felan-ai/ext-subagents';
2
+ export const subagentsExtensionPackage = '@felan-ai/ext-subagents';
3
+ export const builtinExtensionPackages = {
4
+ subagents: subagentsExtensionPackage,
5
+ prewalk: '@felan-ai/ext-prewalk',
6
+ context: '@felan-ai/ext-context',
7
+ powerline: '@felan-ai/ext-powerline',
8
+ };
9
+ export const localExtensionPackages = Object.values(builtinExtensionPackages);
6
10
  const localExtensionPackageSet = new Set(localExtensionPackages);
11
+ export function resolveBuiltinExtensionPackages(settings) {
12
+ if (settings === undefined)
13
+ return localExtensionPackages;
14
+ if (!isRecord(settings))
15
+ throw new Error('builtinExtensions must be an object');
16
+ for (const [name, enabled] of Object.entries(settings)) {
17
+ if (!Object.hasOwn(builtinExtensionPackages, name))
18
+ throw new Error(`Unknown built-in extension: ${name}`);
19
+ if (typeof enabled !== 'boolean')
20
+ throw new Error(`Built-in extension ${name} must be a boolean`);
21
+ }
22
+ return Object.entries(builtinExtensionPackages)
23
+ .filter(([name]) => settings[name] !== false)
24
+ .map(([, packageName]) => packageName);
25
+ }
7
26
  export const importLocalExtension = async (packageName) => {
8
27
  if (!localExtensionPackageSet.has(packageName)) {
9
28
  throw new Error(`Unknown local extension package: ${packageName}`);
10
29
  }
11
30
  return import(packageName);
12
31
  };
32
+ export function createLocalExtensionImporter(host, importExtension = importLocalExtension, shutdownHost) {
33
+ return async (packageName) => {
34
+ if (packageName === subagentsExtensionPackage) {
35
+ const subagents = createSubagentsExtension(host);
36
+ return {
37
+ default: ((pi) => {
38
+ subagents(pi);
39
+ if (shutdownHost) {
40
+ pi.on('session_shutdown', async (event) => {
41
+ if (event.reason !== 'reload')
42
+ await shutdownHost();
43
+ });
44
+ }
45
+ }),
46
+ };
47
+ }
48
+ return importExtension(packageName);
49
+ };
50
+ }
51
+ function isRecord(value) {
52
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
53
+ }
13
54
  //# sourceMappingURL=extensions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,uBAAuB;IACvB,uBAAuB;IACvB,yBAAyB;CACjB,CAAC;AAEX,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAEtF,MAAM,CAAC,MAAM,oBAAoB,GAA6B,KAAK,EAAE,WAAW,EAAE,EAAE;IAClF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC,CAAC"}
1
+ {"version":3,"file":"extensions.js","sourceRoot":"","sources":["../src/extensions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,wBAAwB,GAEzB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,CAAC,MAAM,yBAAyB,GAAG,yBAAyB,CAAC;AACnE,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,SAAS,EAAE,yBAAyB;IACpC,OAAO,EAAE,uBAAuB;IAChC,OAAO,EAAE,uBAAuB;IAChC,SAAS,EAAE,yBAAyB;CAC5B,CAAC;AACX,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;AAK9E,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAEtF,MAAM,UAAU,+BAA+B,CAAC,QAAiB;IAC/D,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,sBAAsB,CAAC;IAC1D,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;IAEhF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;QAC3G,IAAI,OAAO,OAAO,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,oBAAoB,CAAC,CAAC;IACpG,CAAC;IAED,OAAO,MAAM,CAAC,OAAO,CAAC,wBAAwB,CAAC;SAC5C,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC;SAC5C,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAA6B,KAAK,EAAE,WAAW,EAAE,EAAE;IAClF,IAAI,CAAC,wBAAwB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,KAAK,CAAC,oCAAoC,WAAW,EAAE,CAAC,CAAC;IACrE,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAC1C,IAAkB,EAClB,kBAA4C,oBAAoB,EAChE,YAAkC;IAElC,OAAO,KAAK,EAAE,WAAW,EAAE,EAAE;QAC3B,IAAI,WAAW,KAAK,yBAAyB,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC,CAAC;YACjD,OAAO;gBACL,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE;oBACf,SAAS,CAAC,EAAE,CAAC,CAAC;oBACd,IAAI,YAAY,EAAE,CAAC;wBACjB,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;4BACxC,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ;gCAAE,MAAM,YAAY,EAAE,CAAC;wBACtD,CAAC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC,CAAuD;aACzD,CAAC;QACJ,CAAC;QACD,OAAO,eAAe,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,9 +2,14 @@ export { runLocalFelan } from './application.js';
2
2
  export type { RunLocalFelanOptions } from './application.js';
3
3
  export { runCli } from './cli-main.js';
4
4
  export type { CliDependencies } from './cli-main.js';
5
- export { importLocalExtension, localExtensionPackages } from './extensions.js';
6
- export { createLocalFelanRuntime, createLocalModelRuntime, createLocalSessionHost, createLocalSessionRuntimeFactory, getLocalAgentDir, } from './runtime.js';
7
- export type { CreateLocalFelanRuntimeOptions, CreateLocalSessionRuntimeFactoryOptions, } from './runtime.js';
8
- export { createLocalSettingsManager } from './settings.js';
5
+ export { builtinExtensionPackages, importLocalExtension, localExtensionPackages, resolveBuiltinExtensionPackages, } from './extensions.js';
6
+ export type { BuiltinExtensionName, BuiltinExtensionSettings } from './extensions.js';
7
+ export { createLocalFelanRuntime, createLocalModelRuntime, createLocalSessionRuntimeFactory, getLocalAgentDir, getLocalSkillPaths, } from './runtime.js';
8
+ export { LocalSubagentHost } from './subagents/host.js';
9
+ export type { CreateLocalSubagentHostOptions, LocalSubagentSettings, LocalSubagentView, } from './subagents/host.js';
10
+ export type { CreateLocalFelanRuntimeOptions, CreateLocalSessionRuntimeFactoryOptions, LocalFelanRuntime, } from './runtime.js';
11
+ export { createLocalSettingsManager, getFelanSettings } from './settings.js';
12
+ export type { FelanSettings } from './settings.js';
13
+ export { LOCAL_APPEND_SYSTEM_PROMPT_FILENAME, loadLocalAppendSystemPrompt, } from './system-prompt.js';
9
14
  export { FELAN_VERSION } from './version.js';
10
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,gCAAgC,EAChC,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,8BAA8B,EAC9B,uCAAuC,GACxC,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AACtF,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EACV,8BAA8B,EAC9B,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,8BAA8B,EAC9B,uCAAuC,EACvC,iBAAiB,GAClB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC7E,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,mCAAmC,EACnC,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  export { runLocalFelan } from './application.js';
2
2
  export { runCli } from './cli-main.js';
3
- export { importLocalExtension, localExtensionPackages } from './extensions.js';
4
- export { createLocalFelanRuntime, createLocalModelRuntime, createLocalSessionHost, createLocalSessionRuntimeFactory, getLocalAgentDir, } from './runtime.js';
5
- export { createLocalSettingsManager } from './settings.js';
3
+ export { builtinExtensionPackages, importLocalExtension, localExtensionPackages, resolveBuiltinExtensionPackages, } from './extensions.js';
4
+ export { createLocalFelanRuntime, createLocalModelRuntime, createLocalSessionRuntimeFactory, getLocalAgentDir, getLocalSkillPaths, } from './runtime.js';
5
+ export { LocalSubagentHost } from './subagents/host.js';
6
+ export { createLocalSettingsManager, getFelanSettings } from './settings.js';
7
+ export { LOCAL_APPEND_SYSTEM_PROMPT_FILENAME, loadLocalAppendSystemPrompt, } from './system-prompt.js';
6
8
  export { FELAN_VERSION } from './version.js';
7
9
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,gCAAgC,EAChC,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAKtB,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAEvC,OAAO,EACL,wBAAwB,EACxB,oBAAoB,EACpB,sBAAsB,EACtB,+BAA+B,GAChC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,gCAAgC,EAChC,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAWxD,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAE7E,OAAO,EACL,mCAAmC,EACnC,2BAA2B,GAC5B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -1,10 +1,18 @@
1
- import { ModelRuntime, SessionManager, type AgentRuntime, type AgentSessionHost, type CreateAgentSessionRuntimeFactory, type ExtensionPackageImporter } from '@felan-ai/agent-core';
1
+ import { ModelRuntime, SessionManager, type AgentRuntime, type CreateAgentSessionRuntimeFactory, type ExtensionPackageImporter } from '@felan-ai/agent-core';
2
+ import { type AgentSessionRuntime } from '@earendil-works/pi-coding-agent';
3
+ import { LocalSubagentHost, type LocalSubagentSettings } from './subagents/host.js';
4
+ export type LocalFelanRuntime = AgentSessionRuntime & {
5
+ readonly localSubagentHost: LocalSubagentHost;
6
+ subscribeLocalSubagentHost(listener: (host: LocalSubagentHost) => void): () => void;
7
+ };
2
8
  export interface CreateLocalSessionRuntimeFactoryOptions {
3
9
  readonly agentDir: string;
4
10
  readonly modelRuntime: ModelRuntime;
5
11
  readonly extensionPackages?: readonly string[];
6
12
  readonly importExtension?: ExtensionPackageImporter;
7
13
  readonly runtimeFactory?: (cwd: string) => AgentRuntime;
14
+ readonly skillPaths?: readonly string[];
15
+ readonly subagentSettings?: LocalSubagentSettings;
8
16
  }
9
17
  export interface CreateLocalFelanRuntimeOptions {
10
18
  readonly cwd?: string;
@@ -14,10 +22,12 @@ export interface CreateLocalFelanRuntimeOptions {
14
22
  readonly modelRuntime?: ModelRuntime;
15
23
  readonly sessionDir?: string;
16
24
  readonly runtimeFactory?: (cwd: string) => AgentRuntime;
25
+ readonly skillPaths?: readonly string[];
26
+ readonly subagentSettings?: LocalSubagentSettings;
17
27
  }
18
28
  export declare function getLocalAgentDir(): string;
29
+ export declare function getLocalSkillPaths(cwd: string, homeDir?: string): readonly string[];
19
30
  export declare function createLocalSessionRuntimeFactory(options: CreateLocalSessionRuntimeFactoryOptions): CreateAgentSessionRuntimeFactory;
20
- export declare function createLocalSessionHost(options: CreateLocalSessionRuntimeFactoryOptions, cwd: string): AgentSessionHost;
21
31
  export declare function createLocalModelRuntime(agentDir: string): Promise<ModelRuntime>;
22
- export declare function createLocalFelanRuntime(options?: CreateLocalFelanRuntimeOptions): Promise<import("@earendil-works/pi-coding-agent").AgentSessionRuntime>;
32
+ export declare function createLocalFelanRuntime(options?: CreateLocalFelanRuntimeOptions): Promise<LocalFelanRuntime>;
23
33
  //# sourceMappingURL=runtime.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,YAAY,EACZ,cAAc,EAId,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAQ9B,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC;CACzD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC;CACzD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CAyClC;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,uCAAuC,EAChD,GAAG,EAAE,MAAM,GACV,gBAAgB,CA2GlB;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrF;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,8BAAmC,0EAuB7C"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,YAAY,EACZ,cAAc,EAGd,KAAK,YAAY,EAEjB,KAAK,gCAAgC,EACrC,KAAK,wBAAwB,EAC9B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAEL,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAC;AAQzC,OAAO,EACL,iBAAiB,EACjB,KAAK,qBAAqB,EAC3B,MAAM,qBAAqB,CAAC;AAe7B,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD,QAAQ,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAC9C,0BAA0B,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CACrF,CAAC;AAEF,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,CAAC,EAAE,wBAAwB,CAAC;IACpD,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACnD;AAED,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,YAAY,CAAC;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,qBAAqB,CAAC;CACnD;AAED,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,MAAkB,GAAG,SAAS,MAAM,EAAE,CAK9F;AAED,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CA4ElC;AAED,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAKrF;AAED,wBAAsB,uBAAuB,CAC3C,OAAO,GAAE,8BAAmC,GAC3C,OAAO,CAAC,iBAAiB,CAAC,CAyB5B"}